@iamjameslennon/ddb-mcp 2.8.0 → 2.9.0
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/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +19 -4
- package/dist/browser.js.map +1 -1
- package/dist/index.js +10 -18
- package/dist/index.js.map +1 -1
- package/dist/tools/campaign.js +1 -1
- package/dist/tools/campaign.js.map +1 -1
- package/dist/tools/character/ac.d.ts +20 -0
- package/dist/tools/character/ac.d.ts.map +1 -0
- package/dist/tools/character/ac.js +83 -0
- package/dist/tools/character/ac.js.map +1 -0
- package/dist/tools/character/actions.d.ts +22 -0
- package/dist/tools/character/actions.d.ts.map +1 -0
- package/dist/tools/character/actions.js +110 -0
- package/dist/tools/character/actions.js.map +1 -0
- package/dist/tools/character/core.d.ts +15 -0
- package/dist/tools/character/core.d.ts.map +1 -0
- package/dist/tools/character/core.js +129 -0
- package/dist/tools/character/core.js.map +1 -0
- package/dist/tools/character/defenses.d.ts +16 -0
- package/dist/tools/character/defenses.d.ts.map +1 -0
- package/dist/tools/character/defenses.js +27 -0
- package/dist/tools/character/defenses.js.map +1 -0
- package/dist/tools/character/definition.d.ts +14 -0
- package/dist/tools/character/definition.d.ts.map +1 -0
- package/dist/tools/character/definition.js +205 -0
- package/dist/tools/character/definition.js.map +1 -0
- package/dist/tools/character/features.d.ts +26 -0
- package/dist/tools/character/features.d.ts.map +1 -0
- package/dist/tools/character/features.js +107 -0
- package/dist/tools/character/features.js.map +1 -0
- package/dist/tools/character/helpers.d.ts +57 -0
- package/dist/tools/character/helpers.d.ts.map +1 -0
- package/dist/tools/character/helpers.js +80 -0
- package/dist/tools/character/helpers.js.map +1 -0
- package/dist/tools/character/identity.d.ts +19 -0
- package/dist/tools/character/identity.d.ts.map +1 -0
- package/dist/tools/character/identity.js +84 -0
- package/dist/tools/character/identity.js.map +1 -0
- package/dist/tools/character/inventory.d.ts +21 -0
- package/dist/tools/character/inventory.d.ts.map +1 -0
- package/dist/tools/character/inventory.js +61 -0
- package/dist/tools/character/inventory.js.map +1 -0
- package/dist/tools/character/notes.d.ts +20 -0
- package/dist/tools/character/notes.d.ts.map +1 -0
- package/dist/tools/character/notes.js +63 -0
- package/dist/tools/character/notes.js.map +1 -0
- package/dist/tools/character/parse.d.ts +13 -0
- package/dist/tools/character/parse.d.ts.map +1 -0
- package/dist/tools/character/parse.js +82 -0
- package/dist/tools/character/parse.js.map +1 -0
- package/dist/tools/character/spells.d.ts +26 -0
- package/dist/tools/character/spells.d.ts.map +1 -0
- package/dist/tools/character/spells.js +237 -0
- package/dist/tools/character/spells.js.map +1 -0
- package/dist/tools/character/stats.d.ts +33 -0
- package/dist/tools/character/stats.d.ts.map +1 -0
- package/dist/tools/character/stats.js +372 -0
- package/dist/tools/character/stats.js.map +1 -0
- package/dist/tools/character/templates.d.ts +22 -0
- package/dist/tools/character/templates.d.ts.map +1 -0
- package/dist/tools/character/templates.js +61 -0
- package/dist/tools/character/templates.js.map +1 -0
- package/dist/tools/character/types.d.ts +133 -0
- package/dist/tools/character/types.d.ts.map +1 -0
- package/dist/tools/character/types.js +12 -0
- package/dist/tools/character/types.js.map +1 -0
- package/dist/tools/character/vitals.d.ts +34 -0
- package/dist/tools/character/vitals.d.ts.map +1 -0
- package/dist/tools/character/vitals.js +198 -0
- package/dist/tools/character/vitals.js.map +1 -0
- package/dist/tools/character/weapons.d.ts +13 -0
- package/dist/tools/character/weapons.d.ts.map +1 -0
- package/dist/tools/character/weapons.js +79 -0
- package/dist/tools/character/weapons.js.map +1 -0
- package/dist/tools/character.d.ts +13 -3
- package/dist/tools/character.d.ts.map +1 -1
- package/dist/tools/character.js +18 -1181
- package/dist/tools/character.js.map +1 -1
- package/dist/tools/library.d.ts +32 -4
- package/dist/tools/library.d.ts.map +1 -1
- package/dist/tools/library.js +181 -86
- package/dist/tools/library.js.map +1 -1
- package/dist/tools/search.d.ts +1 -2
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +36 -59
- package/dist/tools/search.js.map +1 -1
- package/package.json +2 -1
package/dist/tools/search.js
CHANGED
|
@@ -1,64 +1,41 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
if (category
|
|
17
|
-
|
|
1
|
+
import { searchSpells, searchItems, searchRaces, searchClasses, searchFeats } from "./reference.js";
|
|
2
|
+
import { searchMonsters } from "./monster.js";
|
|
3
|
+
const ALL_CATEGORIES = ["spells", "monsters", "items", "races", "classes", "feats"];
|
|
4
|
+
const CATEGORY_LABELS = {
|
|
5
|
+
spells: "Spells",
|
|
6
|
+
monsters: "Monsters",
|
|
7
|
+
items: "Items",
|
|
8
|
+
races: "Races",
|
|
9
|
+
classes: "Classes",
|
|
10
|
+
feats: "Feats",
|
|
11
|
+
};
|
|
12
|
+
// Each underlying search returns its own "no results" sentence. Detect them so
|
|
13
|
+
// we can omit empty sections in the "all" rollup.
|
|
14
|
+
const EMPTY_RESULT_PATTERN = /^no\s+\w+\s+found/i;
|
|
15
|
+
export async function search(query, category = "all") {
|
|
16
|
+
if (category !== "all") {
|
|
17
|
+
return runCategory(category, query);
|
|
18
18
|
}
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
const results = await Promise.all(ALL_CATEGORIES.map(c => runCategory(c, query).catch(err => `_${err instanceof Error ? err.message : String(err)}_`)));
|
|
20
|
+
const sections = [];
|
|
21
|
+
for (let i = 0; i < ALL_CATEGORIES.length; i++) {
|
|
22
|
+
const body = results[i].trim();
|
|
23
|
+
if (!body || EMPTY_RESULT_PATTERN.test(body))
|
|
24
|
+
continue;
|
|
25
|
+
sections.push(`## ${CATEGORY_LABELS[ALL_CATEGORIES[i]]}\n\n${body}`);
|
|
21
26
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
if (name)
|
|
35
|
-
items.push({ name, type, url: path });
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
// Category listing page — items are in div.info[data-slug] containers
|
|
40
|
-
document.querySelectorAll(".listing-body div.info[data-slug]").forEach((el) => {
|
|
41
|
-
// Use a.link for the name — avoids picking up child tags like <i class="i-concentration">
|
|
42
|
-
const nameLink = el.querySelector("a.link");
|
|
43
|
-
const name = nameLink?.textContent?.trim() ?? "";
|
|
44
|
-
const url = nameLink?.href ?? "";
|
|
45
|
-
const path = url ? new URL(url).pathname : "";
|
|
46
|
-
// Pull level/CR/rarity from typed rows (avoids the noisy name row)
|
|
47
|
-
const levelEl = el.querySelector(".row.spell-level span, .row.monster-challenge span, .row.item-rarity span, .row.class-level span, .row.feat-prerequisite span");
|
|
48
|
-
const schoolEl = el.querySelector(".row.spell-school .school");
|
|
49
|
-
const schoolName = schoolEl
|
|
50
|
-
? (schoolEl.className.replace("school", "").trim() || "")
|
|
51
|
-
: "";
|
|
52
|
-
const extras = [levelEl?.textContent?.trim(), schoolName].filter(Boolean).join(" | ");
|
|
53
|
-
if (name)
|
|
54
|
-
items.push({ name, type: extras, url: path });
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
return items;
|
|
58
|
-
}, category);
|
|
59
|
-
if (results.length === 0) {
|
|
60
|
-
return `No results found for "${query}" in category "${category}". The page URL was: ${searchUrl}`;
|
|
27
|
+
if (sections.length === 0)
|
|
28
|
+
return `No results found for "${query}".`;
|
|
29
|
+
return [`# Search results for "${query}"`, ...sections].join("\n\n");
|
|
30
|
+
}
|
|
31
|
+
async function runCategory(category, query) {
|
|
32
|
+
switch (category) {
|
|
33
|
+
case "spells": return searchSpells({ name: query, limit: 10 });
|
|
34
|
+
case "monsters": return searchMonsters({ name: query });
|
|
35
|
+
case "items": return searchItems({ name: query });
|
|
36
|
+
case "races": return searchRaces(query, 10, 0);
|
|
37
|
+
case "classes": return searchClasses(query, 10, 0);
|
|
38
|
+
case "feats": return searchFeats({ name: query, limit: 10, offset: 0 });
|
|
61
39
|
}
|
|
62
|
-
return JSON.stringify({ query, category, count: results.length, results });
|
|
63
40
|
}
|
|
64
41
|
//# sourceMappingURL=search.js.map
|
package/dist/tools/search.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACpG,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAI9C,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAU,CAAC;AAG7F,MAAM,eAAe,GAAqC;IACxD,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;CACf,CAAC;AAEF,+EAA+E;AAC/E,kDAAkD;AAClD,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,KAAa,EAAE,WAA2B,KAAK;IAC1E,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvB,OAAO,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CACrB,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAC5F,CACF,CAAC;IAEF,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QACvD,QAAQ,CAAC,IAAI,CAAC,MAAM,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,yBAAyB,KAAK,IAAI,CAAC;IACrE,OAAO,CAAC,yBAAyB,KAAK,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvE,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,QAA0B,EAAE,KAAa;IAClE,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ,CAAC,CAAG,OAAO,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QACjE,KAAK,UAAU,CAAC,CAAC,OAAO,cAAc,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACxD,KAAK,OAAO,CAAC,CAAI,OAAO,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACrD,KAAK,OAAO,CAAC,CAAI,OAAO,WAAW,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAClD,KAAK,SAAS,CAAC,CAAE,OAAO,aAAa,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACpD,KAAK,OAAO,CAAC,CAAI,OAAO,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iamjameslennon/ddb-mcp",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.9.0",
|
|
4
4
|
"description": "D&D Beyond MCP Server with Google Auth",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
35
|
+
"cheerio": "^1.2.0",
|
|
35
36
|
"playwright": "^1.49.0"
|
|
36
37
|
},
|
|
37
38
|
"devDependencies": {
|