@mistereman22/osrs-wiki-mcp-server 1.0.0 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -19,7 +19,7 @@ MCP server for the Old School RuneScape Wiki (`https://oldschool.runescape.wiki`
19
19
  "servers": {
20
20
  "osrs-wiki": {
21
21
  "type": "local",
22
- "command": ["npx", "@mistereman22/osrs-wiki-mcp-server@1.0.0"],
22
+ "command": ["npx", "@mistereman22/osrs-wiki-mcp-server"],
23
23
  "environment": { "MCP_CONTACT": "you@example.com" }
24
24
  }
25
25
  }
@@ -33,7 +33,7 @@ MCP server for the Old School RuneScape Wiki (`https://oldschool.runescape.wiki`
33
33
  "mcpServers": {
34
34
  "osrs-wiki": {
35
35
  "command": "npx",
36
- "args": ["@mistereman22/osrs-wiki-mcp-server@1.0.0"],
36
+ "args": ["@mistereman22/osrs-wiki-mcp-server"],
37
37
  "env": { "MCP_CONTACT": "you@example.com" }
38
38
  }
39
39
  }
@@ -48,7 +48,7 @@ MCP server for the Old School RuneScape Wiki (`https://oldschool.runescape.wiki`
48
48
 
49
49
  ### Run directly
50
50
  ```sh
51
- MCP_CONTACT="you@example.com" npx @mistereman22/osrs-wiki-mcp-server@1.0.0
51
+ MCP_CONTACT="you@example.com" npx @mistereman22/osrs-wiki-mcp-server
52
52
  ```
53
53
 
54
54
  ## Configuration
@@ -59,7 +59,7 @@ MCP_CONTACT="you@example.com" npx @mistereman22/osrs-wiki-mcp-server@1.0.0
59
59
 
60
60
  ## Composed User-Agent
61
61
  ```
62
- osrs-wiki-mcp-server/1.0.0 (https://github.com/mistereman22/osrs-wiki-mcp-server) you@example.com
62
+ osrs-wiki-mcp-server/<version> (https://github.com/mistereman22/osrs-wiki-mcp-server) you@example.com
63
63
  ```
64
64
 
65
65
  ## Rate limits
@@ -1 +1 @@
1
- {"version":3,"file":"external.js","sourceRoot":"","sources":["../src/external.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"external.js","sourceRoot":"","sources":["../src/external.ts"],"names":[],"mappings":"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"}
package/dist/meta.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ export declare const SERVER_NAME = "osrs-wiki-mcp-server";
2
+ export declare const SERVER_VERSION: string;
3
+ export declare const SERVER_TITLE = "OSRS Wiki MCP Server";
4
+ export declare const SERVER_DESCRIPTION: string;
5
+ export declare const SERVER_REPO: string;
6
+ export declare const BASE_USER_AGENT: string;
7
+ //# sourceMappingURL=meta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../src/meta.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,WAAW,yBAAyB,CAAC;AAClD,eAAO,MAAM,cAAc,QAAyB,CAAC;AACrD,eAAO,MAAM,YAAY,yBAAyB,CAAC;AACnD,eAAO,MAAM,kBAAkB,QAAwB,CAAC;AAExD,eAAO,MAAM,WAAW,QAGkC,CAAC;AAE3D,eAAO,MAAM,eAAe,QAAsD,CAAC"}
package/dist/meta.js ADDED
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Package identity - derived from package.json.
3
+ * Single source of truth for name, version, repo used across entry points.
4
+ */
5
+ import { createRequire } from 'node:module';
6
+ const pkg = createRequire(import.meta.url)('../package.json');
7
+ export const SERVER_NAME = 'osrs-wiki-mcp-server';
8
+ export const SERVER_VERSION = pkg.version ?? '1.0.0';
9
+ export const SERVER_TITLE = 'OSRS Wiki MCP Server';
10
+ export const SERVER_DESCRIPTION = pkg.description ?? '';
11
+ export const SERVER_REPO = typeof pkg.repository?.url === 'string'
12
+ ? pkg.repository.url.replace(/^git\+/, '').replace(/\.git$/, '')
13
+ : 'https://github.com/mistereman22/osrs-wiki-mcp-server';
14
+ export const BASE_USER_AGENT = `${SERVER_NAME}/${SERVER_VERSION} (${SERVER_REPO})`;
15
+ //# sourceMappingURL=meta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta.js","sourceRoot":"","sources":["../src/meta.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAI3D,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,sBAAsB,CAAC;AAClD,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;AACrD,MAAM,CAAC,MAAM,YAAY,GAAG,sBAAsB,CAAC;AACnD,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;AAExD,MAAM,CAAC,MAAM,WAAW,GACvB,OAAO,GAAG,CAAC,UAAU,EAAE,GAAG,KAAK,QAAQ;IACtC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;IAChE,CAAC,CAAC,sDAAsD,CAAC;AAE3D,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,WAAW,IAAI,cAAc,KAAK,WAAW,GAAG,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Two independent sliding-window rate limiters (package-owned constants).
3
+ * wikiLimiter: per MediaWiki tool call at registration seam.
4
+ * externalLimiter: per HTTP request via callHttp.
5
+ * Over budget: waits up to 10s, then fails with RateLimitError.
6
+ */
7
+ export declare class RateLimitError extends Error {
8
+ }
9
+ declare class SlidingWindowLimiter {
10
+ #private;
11
+ private readonly maxRequests;
12
+ private readonly windowMs;
13
+ private readonly maxWaitMs;
14
+ private readonly label;
15
+ private readonly stamps;
16
+ constructor(maxRequests: number, windowMs: number, maxWaitMs: number, label: string);
17
+ acquire(): Promise<void>;
18
+ }
19
+ export declare const wikiLimiter: SlidingWindowLimiter;
20
+ export declare const externalLimiter: SlidingWindowLimiter;
21
+ export {};
22
+ //# sourceMappingURL=rateLimit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rateLimit.d.ts","sourceRoot":"","sources":["../src/rateLimit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,qBAAa,cAAe,SAAQ,KAAK;CAAG;AAM5C,cAAM,oBAAoB;;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IAEvC,YAAY,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAKlF;IAQK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAkB7B;CACD;AAED,eAAO,MAAM,WAAW,sBAKvB,CAAC;AAEF,eAAO,MAAM,eAAe,sBAK3B,CAAC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Two independent sliding-window rate limiters (package-owned constants).
3
+ * wikiLimiter: per MediaWiki tool call at registration seam.
4
+ * externalLimiter: per HTTP request via callHttp.
5
+ * Over budget: waits up to 10s, then fails with RateLimitError.
6
+ */
7
+ const WINDOW_MS = 60_000;
8
+ const MAX_WAIT_MS = 10_000;
9
+ const WIKI_MAX_REQUESTS = 30;
10
+ const EXTERNAL_MAX_REQUESTS = 30;
11
+ export class RateLimitError extends Error {
12
+ }
13
+ function sleep(ms) {
14
+ return new Promise((resolve) => setTimeout(resolve, ms));
15
+ }
16
+ class SlidingWindowLimiter {
17
+ maxRequests;
18
+ windowMs;
19
+ maxWaitMs;
20
+ label;
21
+ stamps = [];
22
+ constructor(maxRequests, windowMs, maxWaitMs, label) {
23
+ this.maxRequests = maxRequests;
24
+ this.windowMs = windowMs;
25
+ this.maxWaitMs = maxWaitMs;
26
+ this.label = label;
27
+ }
28
+ #prune(now) {
29
+ while (this.stamps.length > 0 && this.stamps[0] + this.windowMs <= now) {
30
+ this.stamps.shift();
31
+ }
32
+ }
33
+ async acquire() {
34
+ for (;;) {
35
+ const now = Date.now();
36
+ this.#prune(now);
37
+ if (this.stamps.length < this.maxRequests) {
38
+ this.stamps.push(now);
39
+ return;
40
+ }
41
+ const waitMs = this.stamps[0] + this.windowMs - now + 1;
42
+ if (waitMs > this.maxWaitMs) {
43
+ throw new RateLimitError(`${this.label} rate limit reached ` +
44
+ `(${this.maxRequests} requests per ${Math.round(this.windowMs / 1000)}s). ` +
45
+ `Retry in ~${Math.ceil(waitMs / 1000)}s.`);
46
+ }
47
+ await sleep(waitMs);
48
+ }
49
+ }
50
+ }
51
+ export const wikiLimiter = new SlidingWindowLimiter(WIKI_MAX_REQUESTS, WINDOW_MS, MAX_WAIT_MS, 'MediaWiki API');
52
+ export const externalLimiter = new SlidingWindowLimiter(EXTERNAL_MAX_REQUESTS, WINDOW_MS, MAX_WAIT_MS, 'External API');
53
+ //# sourceMappingURL=rateLimit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rateLimit.js","sourceRoot":"","sources":["../src/rateLimit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,SAAS,GAAG,MAAM,CAAC;AACzB,MAAM,WAAW,GAAG,MAAM,CAAC;AAC3B,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAEjC,MAAM,OAAO,cAAe,SAAQ,KAAK;CAAG;AAE5C,SAAS,KAAK,CAAC,EAAU;IACxB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,oBAAoB;IACR,WAAW,CAAS;IACpB,QAAQ,CAAS;IACjB,SAAS,CAAS;IAClB,KAAK,CAAS;IACd,MAAM,GAAa,EAAE,CAAC;IAEvC,YAAY,WAAmB,EAAE,QAAgB,EAAE,SAAiB,EAAE,KAAa;QAClF,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,CAAC;IAED,MAAM,CAAC,GAAW;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,IAAI,GAAG,EAAE,CAAC;YACxE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;IACF,CAAC;IAED,KAAK,CAAC,OAAO;QACZ,SAAS,CAAC;YACT,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC3C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACtB,OAAO;YACR,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC;YACxD,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC7B,MAAM,IAAI,cAAc,CACvB,GAAG,IAAI,CAAC,KAAK,sBAAsB;oBAClC,IAAI,IAAI,CAAC,WAAW,iBAAiB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM;oBAC3E,aAAa,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAC1C,CAAC;YACH,CAAC;YACD,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC;IACF,CAAC;CACD;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,oBAAoB,CAClD,iBAAiB,EACjB,SAAS,EACT,WAAW,EACX,eAAe,CACf,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,oBAAoB,CACtD,qBAAqB,EACrB,SAAS,EACT,WAAW,EACX,cAAc,CACd,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAE9D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmBzD"}
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AA8CA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAE9D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmBzD"}
package/dist/resources.js CHANGED
@@ -13,15 +13,22 @@ const RESOURCES = [
13
13
  description: 'Curated hint list of known Bucket buckets on the OSRS wiki (names, query forms, purposes). Not authoritative - if nothing matches, fall back to discovery via search-page-by-prefix in the Bucket: namespace.',
14
14
  mimeType: 'text/markdown',
15
15
  },
16
- // Add more resources here:
17
- // {
18
- // name: 'my-resource',
19
- // uri: 'context://my-resource',
20
- // file: fileURLToPath(new URL('../../resources/my-file.txt', import.meta.url)),
21
- // title: 'My Resource',
22
- // description: 'Description for the model',
23
- // mimeType: 'text/plain',
24
- // },
16
+ {
17
+ name: 'wiki-navigation',
18
+ uri: 'context://wiki-navigation',
19
+ file: fileURLToPath(new URL('../../resources/wiki-navigation.md', import.meta.url)),
20
+ title: 'Wiki Navigation Guide',
21
+ description: 'How to find pages on the OSRS Wiki: namespaces, category structure, redirect handling, disambiguation patterns, and page structure by type.',
22
+ mimeType: 'text/markdown',
23
+ },
24
+ {
25
+ name: 'search-strategies',
26
+ uri: 'context://search-strategies',
27
+ file: fileURLToPath(new URL('../../resources/search-strategies.md', import.meta.url)),
28
+ title: 'Search Strategies',
29
+ description: 'When and how to use search-page, search-page-by-prefix, and get-page metadata for efficient wiki queries. Includes decision tree and common patterns.',
30
+ mimeType: 'text/markdown',
31
+ },
25
32
  ];
26
33
  export function registerResources(server) {
27
34
  for (const resource of RESOURCES) {
@@ -1 +1 @@
1
- {"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAWzC,MAAM,SAAS,GAAqB;IACnC;QACC,IAAI,EAAE,cAAc;QACpB,GAAG,EAAE,wBAAwB;QAC7B,IAAI,EAAE,aAAa,CAAC,IAAI,GAAG,CAAC,iCAAiC,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QAChF,KAAK,EAAE,cAAc;QACrB,WAAW,EACV,+MAA+M;QAChN,QAAQ,EAAE,eAAe;KACzB;IACD,2BAA2B;IAC3B,IAAI;IACJ,wBAAwB;IACxB,iCAAiC;IACjC,iFAAiF;IACjF,yBAAyB;IACzB,6CAA6C;IAC7C,2BAA2B;IAC3B,KAAK;CACL,CAAC;AAIF,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IAClD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAClC,MAAM,CAAC,gBAAgB,CACtB,QAAQ,CAAC,IAAI,EACb,QAAQ,CAAC,GAAG,EACZ;YACC,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;SAC3B,EACD,KAAK,EAAE,GAAiB,EAAE,EAAE;YAC3B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACnD,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;YACtD,OAAO;gBACN,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;aAC5D,CAAC;QACH,CAAC,CACD,CAAC;IACH,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAWzC,MAAM,SAAS,GAAqB;IACnC;QACC,IAAI,EAAE,cAAc;QACpB,GAAG,EAAE,wBAAwB;QAC7B,IAAI,EAAE,aAAa,CAAC,IAAI,GAAG,CAAC,iCAAiC,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QAChF,KAAK,EAAE,cAAc;QACrB,WAAW,EACV,+MAA+M;QAChN,QAAQ,EAAE,eAAe;KACzB;IACD;QACC,IAAI,EAAE,iBAAiB;QACvB,GAAG,EAAE,2BAA2B;QAChC,IAAI,EAAE,aAAa,CAAC,IAAI,GAAG,CAAC,oCAAoC,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QACnF,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EACV,6IAA6I;QAC9I,QAAQ,EAAE,eAAe;KACzB;IACD;QACC,IAAI,EAAE,mBAAmB;QACzB,GAAG,EAAE,6BAA6B;QAClC,IAAI,EAAE,aAAa,CAAC,IAAI,GAAG,CAAC,sCAAsC,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QACrF,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EACV,uJAAuJ;QACxJ,QAAQ,EAAE,eAAe;KACzB;CACD,CAAC;AAIF,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IAClD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAClC,MAAM,CAAC,gBAAgB,CACtB,QAAQ,CAAC,IAAI,EACb,QAAQ,CAAC,GAAG,EACZ;YACC,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;SAC3B,EACD,KAAK,EAAE,GAAiB,EAAE,EAAE;YAC3B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACnD,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;YACtD,OAAO;gBACN,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;aAC5D,CAAC;QACH,CAAC,CACD,CAAC;IACH,CAAC;AACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AA2BA,qBAAa,cAAe,SAAQ,KAAK;CAAG;AAM5C,cAAM,oBAAoB;;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IAEvC,YAAY,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAKlF;IAQK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAkB7B;CACD;AASD,eAAO,MAAM,eAAe,sBAK3B,CAAC;AAyDF,eAAO,MAAM,WAAW,yBAAyB,CAAC;AAClD,eAAO,MAAM,cAAc,UAAU,CAAC;AA4CtC;;GAEG;AACH,OAAO,UAAU,CAAC;AAElB,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAWzD,wBAAsB,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC,CAgDtD"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AA2BA,qBAAa,cAAe,SAAQ,KAAK;CAAG;AAM5C,cAAM,oBAAoB;;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IAEvC,YAAY,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAKlF;IAQK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAkB7B;CACD;AASD,eAAO,MAAM,eAAe,sBAK3B,CAAC;AAyDF,eAAO,MAAM,WAAW,yBAAyB,CAAC;AAClD,eAAO,MAAM,cAAc,UAAU,CAAC;AA4DtC;;GAEG;AACH,OAAO,UAAU,CAAC;AAElB,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAWzD,wBAAsB,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC,CAgDtD"}
package/dist/server.js CHANGED
@@ -114,11 +114,27 @@ const OSRS_WIKI = Object.freeze({
114
114
  // Cache hint: lists change only when wiki probe flips; don't share across deployments.
115
115
  const CACHE_HINT = { ttlMs: 60_000, cacheScope: 'private' };
116
116
  const SERVER_INSTRUCTIONS = [
117
- `Tools and resources for the Old School RuneScape Wiki at ${OSRS_WIKI.server}, served by ${SERVER_NAME}.`,
117
+ 'Tools and resources for the Old School RuneScape Wiki at ' + OSRS_WIKI.server + ', served by ' + SERVER_NAME + '.',
118
118
  'The wiki target is fixed by the package: no tool can add, remove, or switch wikis.',
119
- `Deployment is read-only and anonymous. Outbound calls use User-Agent \`${BASE_USER_AGENT} <MCP_CONTACT>\`.`,
119
+ 'Deployment is read-only and anonymous. Outbound calls use User-Agent `' + BASE_USER_AGENT + ' <MCP_CONTACT>\`.',
120
120
  'MediaWiki tools follow upstream behavior from @professional-wiki/mediawiki-mcp-server.',
121
- 'For structured data prefer `bucket-query`; use `context://bucket-index` to discover buckets, fall back to runtime discovery.',
121
+ 'For structured data (item/monster stats, prices, drops, quest info, gear recommendations) PREFER \'bucket-query\' over reading wiki pages: buckets return semantic rows directly. BEFORE any bucket-query, read \'context://bucket-index\' to find the correct bucket name and fields - it costs no API traffic. If no match there, fall back to runtime discovery - \'search-page-by-prefix\' in the Bucket: namespace, then \'get-page\' for the schema.',
122
+ 'For wiki navigation and search strategy: read \'context://wiki-navigation\' (namespaces, categories, page structure) and \'context://search-strategies\' (tool selection, section discovery) before searching.',
123
+ 'CRITICAL: ALWAYS use .select() and .where() in bucket-query. NEVER run unfiltered queries - they return thousands of rows, bloat context, and strain the wiki. ALWAYS use .select("field1","field2") to limit columns and .where("field","value") to filter rows. Use .limit(N) for pagination.',
124
+ 'bucket-query uses EXACT MATCH ONLY - no wildcards. To find exact values: 1) search-page for the term, 2) use exact result in bucket-query. Example: "Bob\'s Axe Shop" -> search-page "bob axe" -> gets "Bob\'s Brilliant Axes" -> bucket("infobox_shop").where("shop_name","Bob\'s Brilliant Axes")',
125
+ 'If a bucket query returns no results: CHECK THE SCHEMA (get-page Bucket:<name>) - wrong field name or wrong exact value. Fix the query. If the bucket schema does not support your query (e.g., dropsline only queryable by item_name, not source), use the appropriate wiki page directly.',
126
+ 'Common bucket-query patterns (ALWAYS include .select() and .where()):',
127
+ ' * Gear -> bucket("recommended_equipment").select("item","slot").where("activity","hydra").run()',
128
+ ' * GE prices -> bucket("exchange").select("name","value","high_alch").where("name","Abyssal whip").run()',
129
+ ' * Monster stats -> bucket("infobox_monster").select("name","combat_level","hitpoints").where("name","Hydra").run()',
130
+ ' * Item stats -> bucket("infobox_item").select("item_name","value","high_alch").where("item_name","Abyssal whip").run()',
131
+ ' * Drop sources for an item -> bucket("dropsline").select("item_name","drop_json").where("item_name","Abyssal whip").run() (drop_json contains "Dropped from" as JSON text)',
132
+ ' * What drops from a source (boss/chest/activity) -> bucket CANNOT do this; use get-page on the source page directly (see context://bucket-index for patterns)',
133
+ ' * Quest requirements -> bucket("quest").select("name","requirements").where("name","Dragon Slayer I").run()',
134
+ ' * Varbits -> bucket("varbit").select("name","value").where("name","hydra_task").run()',
135
+ ' * Shop lookup -> bucket("infobox_shop").select("shop_name","location","owner").where("shop_name","Bob\'s Brilliant Axes").run()',
136
+ 'Use page reads (\'get-page\', \'search-page\') ONLY for unstructured content: lore, mechanics, walkthroughs.',
137
+ 'For large pages: first call get-page with metadata=true to get section outline, then fetch only the relevant section with section=N. Avoid full-page reads.',
122
138
  'Outbound traffic is rate-limited; calls over budget wait or return rate-limit error.',
123
139
  ].join(' ');
124
140
  function buildWikiConfig() {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,53 +1,53 @@
1
- {
2
- "name": "@mistereman22/osrs-wiki-mcp-server",
3
- "version": "1.0.0",
4
- "description": "MCP server for the Old School RuneScape Wiki: the full MediaWiki MCP tool surface against a pinned read-only wiki.",
5
- "type": "module",
6
- "main": "./dist/index.js",
7
- "bin": {
8
- "osrs-wiki-mcp-server": "./dist/index.js"
9
- },
10
- "files": [
11
- "dist/**/*",
12
- "resources/**/*"
13
- ],
14
- "scripts": {
15
- "build": "tsc",
16
- "start": "node dist/index.js",
17
- "dev": "tsc && node dist/index.js"
18
- },
19
- "publishConfig": {
20
- "access": "public"
21
- },
22
- "engines": {
23
- "node": ">=22.19.0"
24
- },
25
- "repository": {
26
- "type": "git",
27
- "url": "git+https://github.com/mistereman22/osrs-wiki-mcp-server.git"
28
- },
29
- "keywords": [
30
- "mcp",
31
- "model-context-protocol",
32
- "mediawiki",
33
- "osrs",
34
- "runescape",
35
- "wiki"
36
- ],
37
- "author": "mistereman22",
38
- "license": "MIT",
39
- "bugs": {
40
- "url": "https://github.com/mistereman22/osrs-wiki-mcp-server/issues"
41
- },
42
- "homepage": "https://github.com/mistereman22/osrs-wiki-mcp-server#readme",
43
- "dependencies": {
44
- "@modelcontextprotocol/server": "^2.4.0",
45
- "@professional-wiki/mediawiki-mcp-server": "^0.21.0",
46
- "axios": "^1.21.0",
47
- "zod": "^4.6.7"
48
- },
49
- "devDependencies": {
50
- "@types/node": "^26.6.6",
51
- "typescript": "^7.0.2"
52
- }
53
- }
1
+ {
2
+ "name": "@mistereman22/osrs-wiki-mcp-server",
3
+ "version": "1.0.3",
4
+ "description": "MCP server for the Old School RuneScape Wiki: the full MediaWiki MCP tool surface against a pinned read-only wiki.",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "bin": {
8
+ "osrs-wiki-mcp-server": "./dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist/**/*",
12
+ "resources/**/*"
13
+ ],
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "start": "node dist/index.js",
17
+ "dev": "tsc && node dist/index.js"
18
+ },
19
+ "publishConfig": {
20
+ "access": "public"
21
+ },
22
+ "engines": {
23
+ "node": ">=22.19.0"
24
+ },
25
+ "repository": {
26
+ "type": "git",
27
+ "url": "git+https://github.com/mistereman22/osrs-wiki-mcp-server.git"
28
+ },
29
+ "keywords": [
30
+ "mcp",
31
+ "model-context-protocol",
32
+ "mediawiki",
33
+ "osrs",
34
+ "runescape",
35
+ "wiki"
36
+ ],
37
+ "author": "mistereman22",
38
+ "license": "MIT",
39
+ "bugs": {
40
+ "url": "https://github.com/mistereman22/osrs-wiki-mcp-server/issues"
41
+ },
42
+ "homepage": "https://github.com/mistereman22/osrs-wiki-mcp-server#readme",
43
+ "dependencies": {
44
+ "@modelcontextprotocol/server": "^2.4.0",
45
+ "@professional-wiki/mediawiki-mcp-server": "^0.21.0",
46
+ "axios": "^1.21.0",
47
+ "zod": "^4.6.7"
48
+ },
49
+ "devDependencies": {
50
+ "@types/node": "^26.6.6",
51
+ "typescript": "^7.0.2"
52
+ }
53
+ }
@@ -19,13 +19,13 @@
19
19
  | `bucket("bountytaskline")` | Bucket:Bountytaskline | Bounty Hunter task line entries |
20
20
  | `bucket("clue_equipment")` | Bucket:Clue equipment | Equipment associated with clue scroll steps |
21
21
  | `bucket("clue_info")` | Bucket:Clue info | Clue scroll metadata/step info |
22
- | `bucket("collection_log_source")` | Bucket:Collection log source | Sources for collection log slots |
22
+ | `bucket("collection_log_source")` | Bucket:Collection log source | Collection log sources per item: item_id, item_name, sources (repeated wikilinks), rates, kinds. **Only queryable by item_name** - cannot filter by source. To find "what drops from X", use the source page directly. |
23
23
  | `bucket("combat_achievement")` | Bucket:Combat achievement | Combat achievement tasks, tiers, requirements |
24
24
  | `bucket("couriertaskline")` | Bucket:Couriertaskline | Courier activity task line entries |
25
25
  | `bucket("demonicpactleaguetask")` | Bucket:Demonicpactleaguetask | Demonic Pact league task entries |
26
26
  | `bucket("dependency_list")` | Bucket:Dependency list | Item/object dependency relations |
27
- | `bucket("drop_table_sources")` | Bucket:Drop table sources | Which activities/NPCs use which drop tables |
28
- | `bucket("dropsline")` | Bucket:Dropsline | Drop table line entries per source |
27
+ | `bucket("drop_table_sources")` | Bucket:Drop table sources | Shared drop tables (rare drop table, gem drop table, herb drop table) and their roll/rarity data. Not specific monster/boss drop tables. |
28
+ | `bucket("dropsline")` | Bucket:Dropsline | Drop table line entries: item_name, drop_json (JSON text with "Dropped from", rarity, quantity), rare_drop_table. **Only queryable by item_name** - cannot filter by source. To find "what drops from X", use the source page (boss/chest/activity) directly. |
29
29
  | `bucket("exchange")` | Bucket:Exchange | Grand Exchange prices (name, value, high/low, volumes) |
30
30
  | `bucket("feedback")` | Bucket:Feedback | Wiki feedback entries (site-internal) |
31
31
  | `bucket("ge_index_header")` | Bucket:Ge index header | Grand Exchange index header/snapshot metadata |
@@ -33,14 +33,14 @@
33
33
  | `bucket("infobox_bonuses")` | Bucket:Infobox bonuses | Equipment combat stats and bonuses |
34
34
  | `bucket("infobox_construction")` | Bucket:Infobox construction | Construction object/buildable data |
35
35
  | `bucket("infobox_grid_master_unlock")` | Bucket:Infobox grid master unlock | Grid Master unlock data |
36
- | `bucket("infobox_item")` | Bucket:Infobox item | Core item data: id, name, examine, flags, stats |
36
+ | `bucket("infobox_item")` | Bucket:Infobox item | Core item data: item_name, item_id, examine, high_alchemy_value, value, weight, buy_limit, is_members_only, tradeable, image, league_region, release_date, removal_date, value, weight, high_alchemy_value, buy_limit, default_version, quest, version_anchor, is_members_only, tradeable |
37
37
  | `bucket("infobox_location")` | Bucket:Infobox location | Location/area data |
38
- | `bucket("infobox_monster")` | Bucket:Infobox monster | Monster combat stats: level, hitpoints, max hit |
38
+ | `bucket("infobox_monster")` | Bucket:Infobox monster | Monster combat stats: name, combat_level, hitpoints, max_hit, slayer_level, slayer_experience, slayer_category, assigned_by, attack/defence bonuses (stab/slash/crush/magic/range), attack_speed, hitpoints, max_hit, poisonous, attribute, attack_style, attack_speed, respawn_time, experience_bonus, flat_armour, magic_resistance, size, attack/strength/defence/ranged/magic levels, attack_bonus, strength_bonus, range_strength_bonus, magic_damage_bonus, poison/venom/freeze/burn/cannon/thrall resistance, elemental_weakness, elemental_weakness_percent |
39
39
  | `bucket("infobox_npc")` | Bucket:Infobox npc | NPC data: id, combat level, examine |
40
40
  | `bucket("infobox_pure")` | Bucket:Infobox pure | Pure-entity infobox data (verify schema) |
41
41
  | `bucket("infobox_scenery")` | Bucket:Infobox scenery | Scenery/object entity data |
42
42
  | `bucket("infobox_ship_part")` | Bucket:Infobox ship part | Ship part data |
43
- | `bucket("infobox_shop")` | Bucket:Infobox shop | Shop stock and prices |
43
+ | `bucket("infobox_shop")` | Bucket:Infobox shop | Shop data: shop_name, location, owner, specialty, shop_version, is_members_only |
44
44
  | `bucket("infobox_spell")` | Bucket:Infobox spell | Spell data: requirements, effects, costs |
45
45
  | `bucket("interface")` | Bucket:Interface | Game interface definitions |
46
46
  | `bucket("item_id")` | Bucket:Item id | Item name to id mappings |
@@ -58,7 +58,7 @@
58
58
  | `bucket("object_id")` | Bucket:Object id | Object/scenery id mappings |
59
59
  | `bucket("quest")` | Bucket:Quest | Quest data: requirements, rewards, difficulty |
60
60
  | `bucket("recipe")` | Bucket:Recipe | Creation/processing recipes: inputs, outputs, skills |
61
- | `bucket("recommended_equipment")` | Bucket:Recommended equipment | Recommended gear setups by activity/slot |
61
+ | `bucket("recommended_equipment")` | Bucket:Recommended equipment | Recommended gear setups by activity/slot (schema not available on page - use runtime discovery) |
62
62
  | `bucket("seachart")` | Bucket:Seachart | Sea chart/naval data |
63
63
  | `bucket("sound_effect")` | Bucket:Sound effect | Sound effect metadata |
64
64
  | `bucket("soundtrack")` | Bucket:Soundtrack | Soundtrack track data |
@@ -75,3 +75,73 @@
75
75
  with `=`, `!=`, `>`, `<`, `>=`, `<=`; compose with `Bucket.And/Or/Not`.
76
76
  - Example: `bucket("infobox_item").select("item_id","examine").where("item_name","Raw lobster").run()`
77
77
  - Full Lua reference: https://meta.weirdgloop.org/w/Extension:Bucket/Usage
78
+
79
+ ## Best Practices (MANDATORY)
80
+
81
+ - **ALWAYS use `.select("field1","field2")`** - only fetch needed columns
82
+ - **ALWAYS use `.where("field","value")`** - filter rows, never fetch all
83
+ - **Use `.limit(N)`** - cap results (max 500)
84
+ - **Chain filters** with `Bucket.And/Or/Not` for complex conditions
85
+ - **NEVER** run `.run()` without `.select()` and `.where()`
86
+
87
+ ### Exact Match Only - No Wildcards
88
+
89
+ bucket-query uses **exact match only**. To find exact values:
90
+ 1. `search-page` for the term → get exact name
91
+ 2. Use exact name in bucket query
92
+
93
+ Example: "Bob's Axe Shop" → `search-page "bob axe"` → "Bob's Brilliant Axes" → `bucket("infobox_shop").where("shop_name","Bob's Brilliant Axes")`
94
+
95
+ ### Example Patterns
96
+
97
+ ✅ Good:
98
+ ```
99
+ bucket("exchange").select("name","value","high_alch").where("name","Abyssal whip").run()
100
+ bucket("infobox_shop").select("shop_name","location").where("location","Lumbridge").limit(5).run()
101
+ ```
102
+
103
+ ❌ Bad (causes context bloat):
104
+ ```
105
+ bucket("infobox_shop").run()
106
+ bucket("exchange").select("*").run()
107
+ ```
108
+
109
+ ### Pagination
110
+ ```lua
111
+ bucket("infobox_shop").select("shop_name","location").limit(50).continueFrom("cursor").run()
112
+ ```
113
+
114
+ ### Common Bucket Patterns (Always use .select() and .where())
115
+
116
+ | Task | Bucket Query |
117
+ |------|--------------|
118
+ | GE prices | `bucket("exchange").select("name","value","high_alch").where("name","Abyssal whip").run()` |
119
+ | Monster stats | `bucket("infobox_monster").select("name","combat_level","hitpoints").where("name","Hydra").run()` |
120
+ | Item stats | `bucket("infobox_item").select("item_name","value","high_alch").where("item_name","Abyssal whip").run()` |
121
+ | Drop sources | `bucket("dropsline").select("source","quantity").where("item","Abyssal whip").run()` |
122
+ | Quest requirements | `bucket("quest").select("name","requirements").where("name","Dragon Slayer I").run()` |
123
+ | Varbits | `bucket("varbit").select("name","value").where("name","hydra_task").run()` |
124
+ | Shop lookup | `bucket("infobox_shop").select("shop_name","location","owner").where("shop_name","Bob's Brilliant Axes").run()` |
125
+ | Gear recommendations | `bucket("recommended_equipment").select("item","slot").where("activity","hydra").run()` |
126
+
127
+ ### Workflow: Find Exact Values First
128
+
129
+ 1. **search-page** for term → get exact name
130
+ 2. Use exact name in `bucket-query` with `.where()`
131
+
132
+ Example: "best gear for hydra" → `bucket("recommended_equipment").select("item","slot").where("activity","hydra").run()`
133
+
134
+ ### Raid/Group Drop Patterns (use get-page, NOT buckets)
135
+
136
+ No bucket supports "what drops from source" queries. For raid/group content, use `get-page` on individual source pages:
137
+
138
+ | Content | Query |
139
+ |---------|-------|
140
+ | Tombs of Amascut (ToA) | `get-page "Chest (Tombs of Amascut)"` then `get-page "Tumeken's Warden"`, `get-page "Akkha"`, etc. |
141
+ | Chambers of Xeric (CoX) | `get-page "Chambers of Xeric"` then individual boss pages (Olm, Great Olm, etc.) |
142
+ | Theatre of Blood (ToB) | `get-page "Theatre of Blood"` then individual boss pages (Maiden, Bloat, Nylocas, Sotetseg, Xarpus, Verzik) |
143
+ | General boss drops | `get-page "<Boss Name>"` (e.g., "Zulrah", "Vorkath", "Phantom Muspah") |
144
+
145
+ For large pages: `get-page "<Title>" metadata=true` → get section outline → `get-page "<Title>" section=N` for drops section.
146
+
147
+ Use page reads (`get-page`, `search-page`) ONLY for unstructured content: lore, mechanics, walkthroughs.
@@ -0,0 +1,139 @@
1
+ # Search Strategies
2
+
3
+ > When and how to use each search tool effectively.
4
+
5
+ ## Tool Comparison
6
+
7
+ | Tool | Use Case | Returns |
8
+ |------|----------|---------|
9
+ | `search-page` | General topic, keyword, phrase | Page titles + snippets (full-text) |
10
+ | `search-page-by-prefix` | Known prefix, autocomplete | Page titles only (no snippets) |
11
+ | `get-page` (metadata) | Get section outline of known page | Section headings + numbers |
12
+
13
+ ## Decision Tree
14
+
15
+ ```
16
+ Need to find a page?
17
+ │
18
+ ├─ Know exact title? → get-page "Exact Title"
19
+ │
20
+ ├─ Know start of title? → search-page-by-prefix "Prefix"
21
+ │
22
+ ├─ General topic / keywords? → search-page "keywords"
23
+ │
24
+ └─ Want to browse a category? → get-page "Category:Name"
25
+ ```
26
+
27
+ ## search-page Best Practices
28
+
29
+ ### Do:
30
+ - Use specific keywords: `"hydra gear setup"` not `"hydra"`
31
+ - Include context: `"prayer flicking technique"` not `"prayer"`
32
+ - Use quotes for exact phrases: `"/roll"` or `"drop rate"`
33
+
34
+ ### Don't:
35
+ - Use single generic words: `"item"`, `"boss"`, `"quest"`
36
+ - Overuse - check bucket-index first for structured data
37
+
38
+ ### Result Interpretation:
39
+ - Snippet shows match context - verify it's the right page
40
+ - Page ID/size/timestamp help gauge relevance
41
+ - Namespace 0 = main content (what you want)
42
+
43
+ ## search-page-by-prefix Best Practices
44
+
45
+ ### Do:
46
+ - Use when you know the prefix: `"Abyssal "`, `"Dragon "`, `"Barbarian "`
47
+ - Short prefixes return more results: `"Dra"` vs `"Dragon "`
48
+ - Combine with namespace filter for categories: `namespace: 14`
49
+
50
+ ### Don't:
51
+ - Use for general topics (use `search-page`)
52
+ - Expect snippets - only titles returned
53
+
54
+ ## get-page for Section Discovery
55
+
56
+ ### Before reading a large page:
57
+ ```bash
58
+ get-page "Chest (Tombs of Amascut)" metadata=true
59
+ ```
60
+
61
+ ### Returns:
62
+ ```json
63
+ {
64
+ "sections": [
65
+ {"index": 0, "title": "Lead"},
66
+ {"index": 1, "title": "Rewards"},
67
+ {"index": 2, "title": "Unique drops"},
68
+ {"index": 3, "title": "Standard drops"},
69
+ {"index": 4, "title": "Supply drops"}
70
+ ]
71
+ }
72
+ ```
73
+
74
+ ### Then fetch only what you need:
75
+ ```bash
76
+ get-page "Chest (Tombs of Amascut)" section=3 # Standard drops
77
+ get-page "Chest (Tombs of Amascut)" section=2 # Unique drops
78
+ ```
79
+
80
+ ### Section 0 = Lead (intro text)
81
+ ### Section N = Heading N in the article
82
+
83
+ ## Common Search Patterns
84
+
85
+ | Goal | Tool | Query |
86
+ |------|------|-------|
87
+ | Item stats/price | bucket-query | `bucket("exchange").select(...).where("name","...")` |
88
+ | Monster stats | bucket-query | `bucket("infobox_monster").select(...).where("name","...")` |
89
+ | Where item drops from | bucket-query | `bucket("dropsline").select(...).where("item_name","...")` |
90
+ | What boss drops | get-page + metadata | `get-page "Boss Name" metadata=true` → `section=N` |
91
+ | Quest requirements | bucket-query | `bucket("quest").select(...).where("name","...")` |
92
+ | Gear for activity | bucket-query | `bucket("recommended_equipment").select(...).where("activity","...")` |
93
+ | Shop location/items | bucket-query | `bucket("infobox_shop").select(...).where("shop_name","...")` |
94
+ | General mechanic/guide | search-page | `search-page "prayer flicking"` |
95
+ | Browse category | get-page | `get-page "Category:Bosses"` |
96
+ | Find exact title variant | search-page-by-prefix | `search-page-by-prefix "Tumeken"` |
97
+
98
+ ## Canonical Page Heuristic
99
+
100
+ ### When search returns an obvious index/list page → FETCH IT IMMEDIATELY
101
+
102
+ If a search result's **title** and **snippet** together indicate it's the canonical aggregation page for your topic, stop searching and `get-page` it.
103
+
104
+ | Signal | Example |
105
+ |--------|---------|
106
+ | Title = plural/category name | `"Game updates"`, `"Quest list"`, `"Item sets"` |
107
+ | Snippet shows dated/structured entries | `"lists Easter 2026, Cow Boss, Getting Around Poll in chronological order"` |
108
+ | Title matches your query intent exactly | Search `"2026 updates"` → result `"Game updates"` |
109
+
110
+ ### Anti-pattern to avoid
111
+ ```
112
+ search-page "Game update 2026"
113
+ → result: "Game updates" (snippet: "lists Easter 2026, Cow Boss...")
114
+ → ❌ KEEP SEARCHING for "2026 update" "Easter 2026" etc.
115
+ → ✅ get-page "Game updates" ← canonical page, has everything
116
+ ```
117
+
118
+ ### Why this works
119
+ - Wiki index pages (Game updates, Quest list, Monster drop tables) are **curated, complete, and maintained**
120
+ - Search snippets often reveal the exact structure (chronological, by tier, by category)
121
+ - One `get-page` > 5+ `search-page` calls (rate limit, context, accuracy)
122
+
123
+ ### Quick test
124
+ > "Does this result look like *the* page a human would bookmark for this topic?" → Yes → `get-page`
125
+
126
+ ## Rate Limit Awareness
127
+
128
+ - Each search tool call counts toward MediaWiki rate limit (30/min)
129
+ - Prefer bucket-query for structured data (same limit, but returns exact data)
130
+ - Use `metadata=true` + `section=N` to minimize page read calls
131
+ - Cache results mentally within a conversation - don't re-search
132
+
133
+ ## Fallback Chain
134
+
135
+ 1. **bucket-query** (if structured data exists) → check `context://bucket-index`
136
+ 2. **search-page-by-prefix** (if you know title prefix)
137
+ 3. **search-page** (general topic)
138
+ 4. **get-page + metadata** (large page, need specific section)
139
+ 5. **get-page** (full page, last resort)
@@ -0,0 +1,112 @@
1
+ # Wiki Navigation Guide
2
+
3
+ > How to find pages on the Old School RuneScape Wiki using the available tools.
4
+
5
+ ## Namespaces
6
+
7
+ | Namespace ID | Prefix | Purpose |
8
+ |--------------|--------|---------|
9
+ | 0 | (none) | Main content pages (items, monsters, quests, bosses, mechanics) |
10
+ | 1 | Talk: | Discussion pages |
11
+ | 2 | User: | User pages |
12
+ | 6 | File: | Images/media |
13
+ | 10 | Template: | Templates |
14
+ | 14 | Category: | Category listings |
15
+ | 9592 | Bucket: | Bucket extension schemas (use `context://bucket-index` first) |
16
+
17
+ ## Category Structure (Key Categories)
18
+
19
+ **Items:**
20
+ - `Category:Items` → subcategories: `Weapons`, `Armour`, `Food`, `Potions`, `Runes`, `Ammunition`, `Tools`, `Quest items`, etc.
21
+ - `Category:Tradeable items` / `Category:Untradeable items`
22
+ - `Category:Grand Exchange items`
23
+
24
+ **Monsters/NPCs:**
25
+ - `Category:Monsters` → subcategories by type: `Bosses`, `Slayer monsters`, `Dungeon monsters`, `Wilderness monsters`
26
+ - `Category:Aggressive monsters`, `Category:Poisonous monsters`
27
+
28
+ **Content:**
29
+ - `Category:Quests` → `Free-to-play quests`, `Members quests`, `Novice/Intermediate/Experienced/Master/Grandmaster quests`
30
+ - `Category:Achievement Diaries`, `Category:Combat Achievements`
31
+ - `Category:Minigames`, `Category:Raids`, `Category:Activities`
32
+ - `Category:Locations`, `Category:Dungeons`, `Category:Cities`
33
+
34
+ **Data:**
35
+ - `Category:Exchange` (GE price pages)
36
+ - `Category:Drop tables`
37
+
38
+ ## Finding Pages - Strategy
39
+
40
+ ### 0. Search hit a canonical index page? Fetch it.
41
+ ```bash
42
+ search-page "2026 game updates"
43
+ # Result: "Game updates" - snippet shows chronological list
44
+ get-page "Game updates" # ← Do this first
45
+ ```
46
+
47
+ ### 1. Known exact title? Use `get-page` directly
48
+ ```bash
49
+ get-page "Abyssal whip"
50
+ get-page "Tumeken's Warden"
51
+ ```
52
+
53
+ ### 2. Know approximate title? Use `search-page-by-prefix`
54
+ ```bash
55
+ search-page-by-prefix "Abyssal" # "Abyssal whip", "Abyssal dagger", etc.
56
+ search-page-by-prefix "Tumeken" # "Tumeken's Warden"
57
+ search-page-by-prefix "Chest (Tombs" # "Chest (Tombs of Amascut)"
58
+ ```
59
+
60
+ ### 3. General topic? Use `search-page` (full-text)
61
+ ```bash
62
+ search-page "hydra gear recommendations"
63
+ search-page "prayer flicking guide"
64
+ search-page "slayer task weights"
65
+ ```
66
+
67
+ ### 4. Browse via categories (when you don't know titles)
68
+ ```bash
69
+ get-page "Category:Bosses" # Lists all boss pages
70
+ get-page "Category:Slayer monsters" # Lists all slayer monsters
71
+ get-page "Category:Grand Exchange items" # Lists all GE-tracked items
72
+ ```
73
+
74
+ ## Redirects
75
+
76
+ Many pages redirect (e.g., "Abby whip" → "Abyssal whip"). `get-page` follows redirects by default. If you need the redirect target without following, use `followRedirects=false`.
77
+
78
+ ## Disambiguation
79
+
80
+ Common disambiguation patterns:
81
+ - `Item Name (disambiguation)` - rare
82
+ - `Item Name (item)` vs `Item Name (monster)` - e.g., "Dragon (item)" vs "Dragon (monster)"
83
+ - Use `search-page` to find the correct variant
84
+
85
+ ## Page Structure by Type
86
+
87
+ | Page Type | Key Sections |
88
+ |-----------|--------------|
89
+ | **Items** | Infobox (stats), Obtaining, Usage, Changes |
90
+ | **Monsters** | Infobox (stats), Drops, Strategies, Locations |
91
+ | **Bosses** | Infobox, Mechanics, Strategies, Drops, Hard mode |
92
+ | **Quests** | Infobox, Requirements, Walkthrough, Rewards, Quick guide |
93
+ | **Locations** | Map, Features, NPCs, Monsters, Shops |
94
+ | **Raids** | Overview, Entry requirements, Rooms/Bosses, Rewards, Strategies |
95
+
96
+ ## Infobox Fields (Semantic Data → Use Buckets)
97
+
98
+ Most structured data lives in infoboxes and is available via buckets:
99
+ - Items → `bucket("infobox_item")` or `bucket("exchange")`
100
+ - Monsters → `bucket("infobox_monster")`
101
+ - Shops → `bucket("infobox_shop")`
102
+ - NPCs → `bucket("infobox_npc")`
103
+
104
+ ## Quick Reference: Common Prefixes
105
+
106
+ | Looking for... | Try prefix search |
107
+ |----------------|-------------------|
108
+ | Weapon variants | `search-page-by-prefix "Dragon "` |
109
+ | Armour sets | `search-page-by-prefix "Bandos "` |
110
+ | Potions | `search-page-by-prefix "Prayer "` |
111
+ | Bosses | `search-page-by-prefix "Phantom "` |
112
+ | Quests | `search-page-by-prefix "Recipe for "` |