@xiedada/nodemw-mcp-server 0.0.1

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.
Files changed (195) hide show
  1. package/LICENSE +166 -0
  2. package/README.md +145 -0
  3. package/dist/common/nodemwBot.d.ts +21 -0
  4. package/dist/common/nodemwBot.d.ts.map +1 -0
  5. package/dist/common/nodemwBot.js +62 -0
  6. package/dist/common/nodemwBot.js.map +1 -0
  7. package/dist/common/utils.d.ts +7 -0
  8. package/dist/common/utils.d.ts.map +1 -0
  9. package/dist/common/utils.js +38 -0
  10. package/dist/common/utils.js.map +1 -0
  11. package/dist/index.d.ts +3 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +64 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/server.d.ts +4 -0
  16. package/dist/server.d.ts.map +1 -0
  17. package/dist/server.js +9 -0
  18. package/dist/server.js.map +1 -0
  19. package/dist/tools/editing/add-flow-topic.d.ts +3 -0
  20. package/dist/tools/editing/add-flow-topic.d.ts.map +1 -0
  21. package/dist/tools/editing/add-flow-topic.js +25 -0
  22. package/dist/tools/editing/add-flow-topic.js.map +1 -0
  23. package/dist/tools/editing/append.d.ts +3 -0
  24. package/dist/tools/editing/append.d.ts.map +1 -0
  25. package/dist/tools/editing/append.js +26 -0
  26. package/dist/tools/editing/append.js.map +1 -0
  27. package/dist/tools/editing/create-account.d.ts +3 -0
  28. package/dist/tools/editing/create-account.d.ts.map +1 -0
  29. package/dist/tools/editing/create-account.js +24 -0
  30. package/dist/tools/editing/create-account.js.map +1 -0
  31. package/dist/tools/editing/delete.d.ts +3 -0
  32. package/dist/tools/editing/delete.d.ts.map +1 -0
  33. package/dist/tools/editing/delete.js +25 -0
  34. package/dist/tools/editing/delete.js.map +1 -0
  35. package/dist/tools/editing/edit.d.ts +3 -0
  36. package/dist/tools/editing/edit.d.ts.map +1 -0
  37. package/dist/tools/editing/edit.js +27 -0
  38. package/dist/tools/editing/edit.js.map +1 -0
  39. package/dist/tools/editing/move.d.ts +3 -0
  40. package/dist/tools/editing/move.d.ts.map +1 -0
  41. package/dist/tools/editing/move.js +26 -0
  42. package/dist/tools/editing/move.js.map +1 -0
  43. package/dist/tools/editing/prepend.d.ts +3 -0
  44. package/dist/tools/editing/prepend.d.ts.map +1 -0
  45. package/dist/tools/editing/prepend.js +26 -0
  46. package/dist/tools/editing/prepend.js.map +1 -0
  47. package/dist/tools/editing/protect.d.ts +3 -0
  48. package/dist/tools/editing/protect.d.ts.map +1 -0
  49. package/dist/tools/editing/protect.js +37 -0
  50. package/dist/tools/editing/protect.js.map +1 -0
  51. package/dist/tools/editing/purge.d.ts +3 -0
  52. package/dist/tools/editing/purge.d.ts.map +1 -0
  53. package/dist/tools/editing/purge.js +23 -0
  54. package/dist/tools/editing/purge.js.map +1 -0
  55. package/dist/tools/editing/send-email.d.ts +3 -0
  56. package/dist/tools/editing/send-email.d.ts.map +1 -0
  57. package/dist/tools/editing/send-email.js +25 -0
  58. package/dist/tools/editing/send-email.js.map +1 -0
  59. package/dist/tools/editing/upload-by-url.d.ts +3 -0
  60. package/dist/tools/editing/upload-by-url.d.ts.map +1 -0
  61. package/dist/tools/editing/upload-by-url.js +26 -0
  62. package/dist/tools/editing/upload-by-url.js.map +1 -0
  63. package/dist/tools/editing/upload.d.ts +3 -0
  64. package/dist/tools/editing/upload.d.ts.map +1 -0
  65. package/dist/tools/editing/upload.js +27 -0
  66. package/dist/tools/editing/upload.js.map +1 -0
  67. package/dist/tools/index.d.ts +3 -0
  68. package/dist/tools/index.d.ts.map +1 -0
  69. package/dist/tools/index.js +105 -0
  70. package/dist/tools/index.js.map +1 -0
  71. package/dist/tools/ro/expand-templates.d.ts +3 -0
  72. package/dist/tools/ro/expand-templates.d.ts.map +1 -0
  73. package/dist/tools/ro/expand-templates.js +28 -0
  74. package/dist/tools/ro/expand-templates.js.map +1 -0
  75. package/dist/tools/ro/get-all-pages.d.ts +3 -0
  76. package/dist/tools/ro/get-all-pages.d.ts.map +1 -0
  77. package/dist/tools/ro/get-all-pages.js +30 -0
  78. package/dist/tools/ro/get-all-pages.js.map +1 -0
  79. package/dist/tools/ro/get-article-categories.d.ts +3 -0
  80. package/dist/tools/ro/get-article-categories.d.ts.map +1 -0
  81. package/dist/tools/ro/get-article-categories.js +27 -0
  82. package/dist/tools/ro/get-article-categories.js.map +1 -0
  83. package/dist/tools/ro/get-article-info.d.ts +3 -0
  84. package/dist/tools/ro/get-article-info.d.ts.map +1 -0
  85. package/dist/tools/ro/get-article-info.js +35 -0
  86. package/dist/tools/ro/get-article-info.js.map +1 -0
  87. package/dist/tools/ro/get-article-properties.d.ts +3 -0
  88. package/dist/tools/ro/get-article-properties.d.ts.map +1 -0
  89. package/dist/tools/ro/get-article-properties.js +26 -0
  90. package/dist/tools/ro/get-article-properties.js.map +1 -0
  91. package/dist/tools/ro/get-article-revisions.d.ts +3 -0
  92. package/dist/tools/ro/get-article-revisions.d.ts.map +1 -0
  93. package/dist/tools/ro/get-article-revisions.js +29 -0
  94. package/dist/tools/ro/get-article-revisions.js.map +1 -0
  95. package/dist/tools/ro/get-article.d.ts +3 -0
  96. package/dist/tools/ro/get-article.d.ts.map +1 -0
  97. package/dist/tools/ro/get-article.js +54 -0
  98. package/dist/tools/ro/get-article.js.map +1 -0
  99. package/dist/tools/ro/get-backlinks.d.ts +3 -0
  100. package/dist/tools/ro/get-backlinks.d.ts.map +1 -0
  101. package/dist/tools/ro/get-backlinks.js +27 -0
  102. package/dist/tools/ro/get-backlinks.js.map +1 -0
  103. package/dist/tools/ro/get-categories.d.ts +3 -0
  104. package/dist/tools/ro/get-categories.d.ts.map +1 -0
  105. package/dist/tools/ro/get-categories.js +27 -0
  106. package/dist/tools/ro/get-categories.js.map +1 -0
  107. package/dist/tools/ro/get-external-links.d.ts +3 -0
  108. package/dist/tools/ro/get-external-links.d.ts.map +1 -0
  109. package/dist/tools/ro/get-external-links.js +27 -0
  110. package/dist/tools/ro/get-external-links.js.map +1 -0
  111. package/dist/tools/ro/get-image-info.d.ts +3 -0
  112. package/dist/tools/ro/get-image-info.d.ts.map +1 -0
  113. package/dist/tools/ro/get-image-info.js +29 -0
  114. package/dist/tools/ro/get-image-info.js.map +1 -0
  115. package/dist/tools/ro/get-image-usage.d.ts +3 -0
  116. package/dist/tools/ro/get-image-usage.d.ts.map +1 -0
  117. package/dist/tools/ro/get-image-usage.js +27 -0
  118. package/dist/tools/ro/get-image-usage.js.map +1 -0
  119. package/dist/tools/ro/get-images-from-article.d.ts +3 -0
  120. package/dist/tools/ro/get-images-from-article.d.ts.map +1 -0
  121. package/dist/tools/ro/get-images-from-article.js +27 -0
  122. package/dist/tools/ro/get-images-from-article.js.map +1 -0
  123. package/dist/tools/ro/get-images.d.ts +3 -0
  124. package/dist/tools/ro/get-images.d.ts.map +1 -0
  125. package/dist/tools/ro/get-images.js +43 -0
  126. package/dist/tools/ro/get-images.js.map +1 -0
  127. package/dist/tools/ro/get-log.d.ts +3 -0
  128. package/dist/tools/ro/get-log.d.ts.map +1 -0
  129. package/dist/tools/ro/get-log.js +46 -0
  130. package/dist/tools/ro/get-log.js.map +1 -0
  131. package/dist/tools/ro/get-mediawiki-version.d.ts +3 -0
  132. package/dist/tools/ro/get-mediawiki-version.d.ts.map +1 -0
  133. package/dist/tools/ro/get-mediawiki-version.js +20 -0
  134. package/dist/tools/ro/get-mediawiki-version.js.map +1 -0
  135. package/dist/tools/ro/get-pages-by-prefix.d.ts +3 -0
  136. package/dist/tools/ro/get-pages-by-prefix.d.ts.map +1 -0
  137. package/dist/tools/ro/get-pages-by-prefix.js +27 -0
  138. package/dist/tools/ro/get-pages-by-prefix.js.map +1 -0
  139. package/dist/tools/ro/get-pages-in-category.d.ts +3 -0
  140. package/dist/tools/ro/get-pages-in-category.d.ts.map +1 -0
  141. package/dist/tools/ro/get-pages-in-category.js +29 -0
  142. package/dist/tools/ro/get-pages-in-category.js.map +1 -0
  143. package/dist/tools/ro/get-pages-in-namespace.d.ts +3 -0
  144. package/dist/tools/ro/get-pages-in-namespace.d.ts.map +1 -0
  145. package/dist/tools/ro/get-pages-in-namespace.js +27 -0
  146. package/dist/tools/ro/get-pages-in-namespace.js.map +1 -0
  147. package/dist/tools/ro/get-pages-transcluding.d.ts +3 -0
  148. package/dist/tools/ro/get-pages-transcluding.d.ts.map +1 -0
  149. package/dist/tools/ro/get-pages-transcluding.js +32 -0
  150. package/dist/tools/ro/get-pages-transcluding.js.map +1 -0
  151. package/dist/tools/ro/get-query-page.d.ts +3 -0
  152. package/dist/tools/ro/get-query-page.d.ts.map +1 -0
  153. package/dist/tools/ro/get-query-page.js +27 -0
  154. package/dist/tools/ro/get-query-page.js.map +1 -0
  155. package/dist/tools/ro/get-recent-changes.d.ts +3 -0
  156. package/dist/tools/ro/get-recent-changes.d.ts.map +1 -0
  157. package/dist/tools/ro/get-recent-changes.js +43 -0
  158. package/dist/tools/ro/get-recent-changes.js.map +1 -0
  159. package/dist/tools/ro/get-site-info.d.ts +3 -0
  160. package/dist/tools/ro/get-site-info.d.ts.map +1 -0
  161. package/dist/tools/ro/get-site-info.js +23 -0
  162. package/dist/tools/ro/get-site-info.js.map +1 -0
  163. package/dist/tools/ro/get-site-stats.d.ts +3 -0
  164. package/dist/tools/ro/get-site-stats.d.ts.map +1 -0
  165. package/dist/tools/ro/get-site-stats.js +20 -0
  166. package/dist/tools/ro/get-site-stats.js.map +1 -0
  167. package/dist/tools/ro/get-user-contribs.d.ts +3 -0
  168. package/dist/tools/ro/get-user-contribs.d.ts.map +1 -0
  169. package/dist/tools/ro/get-user-contribs.js +39 -0
  170. package/dist/tools/ro/get-user-contribs.js.map +1 -0
  171. package/dist/tools/ro/get-users.d.ts +3 -0
  172. package/dist/tools/ro/get-users.d.ts.map +1 -0
  173. package/dist/tools/ro/get-users.js +29 -0
  174. package/dist/tools/ro/get-users.js.map +1 -0
  175. package/dist/tools/ro/parse.d.ts +3 -0
  176. package/dist/tools/ro/parse.d.ts.map +1 -0
  177. package/dist/tools/ro/parse.js +37 -0
  178. package/dist/tools/ro/parse.js.map +1 -0
  179. package/dist/tools/ro/search.d.ts +3 -0
  180. package/dist/tools/ro/search.d.ts.map +1 -0
  181. package/dist/tools/ro/search.js +32 -0
  182. package/dist/tools/ro/search.js.map +1 -0
  183. package/dist/tools/ro/whoami.d.ts +3 -0
  184. package/dist/tools/ro/whoami.d.ts.map +1 -0
  185. package/dist/tools/ro/whoami.js +20 -0
  186. package/dist/tools/ro/whoami.js.map +1 -0
  187. package/dist/tools/ro/whoare.d.ts +3 -0
  188. package/dist/tools/ro/whoare.d.ts.map +1 -0
  189. package/dist/tools/ro/whoare.js +19 -0
  190. package/dist/tools/ro/whoare.js.map +1 -0
  191. package/dist/tools/ro/whois.d.ts +3 -0
  192. package/dist/tools/ro/whois.d.ts.map +1 -0
  193. package/dist/tools/ro/whois.js +26 -0
  194. package/dist/tools/ro/whois.js.map +1 -0
  195. package/package.json +53 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-all-pages.js","sourceRoot":"","sources":["../../../src/tools/ro/get-all-pages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAShE,MAAM,UAAU,eAAe,CAAE,MAAiB;IACjD,OAAO,MAAM,CAAC,IAAI,CACjB,eAAe,EACf,0CAA0C,EAC1C;QACC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,mCAAmC,CAAC;KACvF,EACD;QACC,KAAK,EAAE,eAAe;QACtB,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;KACH,EACpB,KAAK,EAAG,EAAE,KAAK,EAAE,EAAG,EAAE,CAAC,qBAAqB,CAAE,KAAK,CAAE,CACrD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,qBAAqB,CACnC,KAAa;IAEb,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAC1C,GAAG,EACH,aAAa,CACb,CAAC;QAEF,gBAAgB;QAChB,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAE3C,OAAO,UAAU,CAAC;YACjB,KAAK,EAAE,UAAU,CAAC,MAAM;YACxB,SAAS,EAAE,OAAO,CAAC,MAAM;YACzB,KAAK,EAAE,OAAO;YACd,KAAK;SACL,CAAC,CAAC;IACJ,CAAC;IAAC,OAAQ,KAAK,EAAG,CAAC;QAClB,OAAO,WAAW,CAAC,yBAAyB,EAAE,KAAc,CAAC,CAAC;IAC/D,CAAC;AACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function getArticleCategoriesTool(server: McpServer): RegisteredTool;
3
+ //# sourceMappingURL=get-article-categories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-article-categories.d.ts","sourceRoot":"","sources":["../../../src/tools/ro/get-article-categories.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAKzF,wBAAgB,wBAAwB,CAAE,MAAM,EAAE,SAAS,GAAI,cAAc,CAc5E"}
@@ -0,0 +1,27 @@
1
+ import { z } from 'zod';
2
+ import { getBot, promisifyBotMethod } from '../../common/nodemwBot.js';
3
+ import { jsonResult, errorResult } from '../../common/utils.js';
4
+ export function getArticleCategoriesTool(server) {
5
+ return server.tool('get-article-categories', 'Get all categories that an article belongs to', {
6
+ title: z.union([z.string(), z.number()]).describe('Article title or page ID')
7
+ }, {
8
+ title: 'Get article categories',
9
+ readOnlyHint: true,
10
+ destructiveHint: false
11
+ }, async ({ title }) => handleGetArticleCategoriesTool(title));
12
+ }
13
+ async function handleGetArticleCategoriesTool(title) {
14
+ try {
15
+ const bot = await getBot();
16
+ const categories = await promisifyBotMethod(bot, 'getArticleCategories', title);
17
+ return jsonResult({
18
+ title,
19
+ categories,
20
+ count: categories.length
21
+ });
22
+ }
23
+ catch (error) {
24
+ return errorResult('Failed to get article categories', error);
25
+ }
26
+ }
27
+ //# sourceMappingURL=get-article-categories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-article-categories.js","sourceRoot":"","sources":["../../../src/tools/ro/get-article-categories.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,UAAU,wBAAwB,CAAE,MAAiB;IAC1D,OAAO,MAAM,CAAC,IAAI,CACjB,wBAAwB,EACxB,+CAA+C,EAC/C;QACC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KAC7E,EACD;QACC,KAAK,EAAE,wBAAwB;QAC/B,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;KACH,EACpB,KAAK,EAAG,EAAE,KAAK,EAAE,EAAG,EAAE,CAAC,8BAA8B,CAAE,KAAK,CAAE,CAC9D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,8BAA8B,CAC5C,KAAsB;IAEtB,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAC1C,GAAG,EACH,sBAAsB,EACtB,KAAK,CACL,CAAC;QAEF,OAAO,UAAU,CAAC;YACjB,KAAK;YACL,UAAU;YACV,KAAK,EAAE,UAAU,CAAC,MAAM;SACxB,CAAC,CAAC;IACJ,CAAC;IAAC,OAAQ,KAAK,EAAG,CAAC;QAClB,OAAO,WAAW,CAAC,kCAAkC,EAAE,KAAc,CAAC,CAAC;IACxE,CAAC;AACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function getArticleInfoTool(server: McpServer): RegisteredTool;
3
+ //# sourceMappingURL=get-article-info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-article-info.d.ts","sourceRoot":"","sources":["../../../src/tools/ro/get-article-info.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAYzF,wBAAgB,kBAAkB,CAAE,MAAM,EAAE,SAAS,GAAI,cAAc,CAmBtE"}
@@ -0,0 +1,35 @@
1
+ import { z } from 'zod';
2
+ import { getBot, promisifyBotMethod } from '../../common/nodemwBot.js';
3
+ import { jsonResult, errorResult } from '../../common/utils.js';
4
+ export function getArticleInfoTool(server) {
5
+ return server.tool('get-article-info', 'Get detailed information about one or more articles', {
6
+ title: z.union([
7
+ z.string(),
8
+ z.number(),
9
+ z.array(z.union([z.string(), z.number()]))
10
+ ]).describe('Article title, page ID, or array of titles/IDs'),
11
+ properties: z.array(z.string()).optional().describe('Specific properties to retrieve')
12
+ }, {
13
+ title: 'Get article info',
14
+ readOnlyHint: true,
15
+ destructiveHint: false
16
+ }, async ({ title, properties }) => handleGetArticleInfoTool(title, properties));
17
+ }
18
+ async function handleGetArticleInfoTool(title, properties) {
19
+ try {
20
+ const bot = await getBot();
21
+ const options = properties ? { inprop: properties } : {};
22
+ const info = await promisifyBotMethod(bot, 'getArticleInfo', title, options);
23
+ // Handle array of results vs single result
24
+ const results = Array.isArray(info) ? info : [info];
25
+ return jsonResult({
26
+ title,
27
+ results,
28
+ count: results.length
29
+ });
30
+ }
31
+ catch (error) {
32
+ return errorResult('Failed to get article info', error);
33
+ }
34
+ }
35
+ //# sourceMappingURL=get-article-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-article-info.js","sourceRoot":"","sources":["../../../src/tools/ro/get-article-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAShE,MAAM,UAAU,kBAAkB,CAAE,MAAiB;IACpD,OAAO,MAAM,CAAC,IAAI,CACjB,kBAAkB,EAClB,qDAAqD,EACrD;QACC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC;YACd,CAAC,CAAC,MAAM,EAAE;YACV,CAAC,CAAC,MAAM,EAAE;YACV,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;SAC1C,CAAC,CAAC,QAAQ,CAAC,gDAAgD,CAAC;QAC7D,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;KACtF,EACD;QACC,KAAK,EAAE,kBAAkB;QACzB,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;KACH,EACpB,KAAK,EAAG,EAAE,KAAK,EAAE,UAAU,EAAE,EAAG,EAAE,CAAC,wBAAwB,CAAE,KAAK,EAAE,UAAU,CAAE,CAChF,CAAC;AACH,CAAC;AAED,KAAK,UAAU,wBAAwB,CACtC,KAA4C,EAC5C,UAAqB;IAErB,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,GAAG,MAAM,kBAAkB,CACpC,GAAG,EACH,gBAAgB,EAChB,KAAK,EACL,OAAO,CACP,CAAC;QAEF,2CAA2C;QAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAEpD,OAAO,UAAU,CAAC;YACjB,KAAK;YACL,OAAO;YACP,KAAK,EAAE,OAAO,CAAC,MAAM;SACrB,CAAC,CAAC;IACJ,CAAC;IAAC,OAAQ,KAAK,EAAG,CAAC;QAClB,OAAO,WAAW,CAAC,4BAA4B,EAAE,KAAc,CAAC,CAAC;IAClE,CAAC;AACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function getArticlePropertiesTool(server: McpServer): RegisteredTool;
3
+ //# sourceMappingURL=get-article-properties.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-article-properties.d.ts","sourceRoot":"","sources":["../../../src/tools/ro/get-article-properties.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAUzF,wBAAgB,wBAAwB,CAAE,MAAM,EAAE,SAAS,GAAI,cAAc,CAc5E"}
@@ -0,0 +1,26 @@
1
+ import { z } from 'zod';
2
+ import { getBot, promisifyBotMethod } from '../../common/nodemwBot.js';
3
+ import { jsonResult, errorResult } from '../../common/utils.js';
4
+ export function getArticlePropertiesTool(server) {
5
+ return server.tool('get-article-properties', 'Get page properties for a wiki article', {
6
+ title: z.string().describe('Article title')
7
+ }, {
8
+ title: 'Get article properties',
9
+ readOnlyHint: true,
10
+ destructiveHint: false
11
+ }, async ({ title }) => handleGetArticlePropertiesTool(title));
12
+ }
13
+ async function handleGetArticlePropertiesTool(title) {
14
+ try {
15
+ const bot = await getBot();
16
+ const properties = await promisifyBotMethod(bot, 'getArticleProperties', title);
17
+ return jsonResult({
18
+ title,
19
+ properties
20
+ });
21
+ }
22
+ catch (error) {
23
+ return errorResult('Failed to get article properties', error);
24
+ }
25
+ }
26
+ //# sourceMappingURL=get-article-properties.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-article-properties.js","sourceRoot":"","sources":["../../../src/tools/ro/get-article-properties.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAOhE,MAAM,UAAU,wBAAwB,CAAE,MAAiB;IAC1D,OAAO,MAAM,CAAC,IAAI,CACjB,wBAAwB,EACxB,wCAAwC,EACxC;QACC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;KAC3C,EACD;QACC,KAAK,EAAE,wBAAwB;QAC/B,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;KACH,EACpB,KAAK,EAAG,EAAE,KAAK,EAAE,EAAG,EAAE,CAAC,8BAA8B,CAAE,KAAK,CAAE,CAC9D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,8BAA8B,CAC5C,KAAa;IAEb,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAC1C,GAAG,EACH,sBAAsB,EACtB,KAAK,CACL,CAAC;QAEF,OAAO,UAAU,CAAC;YACjB,KAAK;YACL,UAAU;SACV,CAAC,CAAC;IACJ,CAAC;IAAC,OAAQ,KAAK,EAAG,CAAC;QAClB,OAAO,WAAW,CAAC,kCAAkC,EAAE,KAAc,CAAC,CAAC;IACxE,CAAC;AACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function getArticleRevisionsTool(server: McpServer): RegisteredTool;
3
+ //# sourceMappingURL=get-article-revisions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-article-revisions.d.ts","sourceRoot":"","sources":["../../../src/tools/ro/get-article-revisions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAczF,wBAAgB,uBAAuB,CAAE,MAAM,EAAE,SAAS,GAAI,cAAc,CAc3E"}
@@ -0,0 +1,29 @@
1
+ import { z } from 'zod';
2
+ import { getBot, promisifyBotMethod } from '../../common/nodemwBot.js';
3
+ import { jsonResult, errorResult } from '../../common/utils.js';
4
+ export function getArticleRevisionsTool(server) {
5
+ return server.tool('get-article-revisions', 'Get all revisions of a wiki article', {
6
+ title: z.union([z.string(), z.number()]).describe('Article title or page ID')
7
+ }, {
8
+ title: 'Get article revisions',
9
+ readOnlyHint: true,
10
+ destructiveHint: false
11
+ }, async ({ title }) => handleGetArticleRevisionsTool(title));
12
+ }
13
+ async function handleGetArticleRevisionsTool(title) {
14
+ try {
15
+ const bot = await getBot();
16
+ const allRevisions = await promisifyBotMethod(bot, 'getArticleRevisions', title);
17
+ // Flatten the results
18
+ const revisions = allRevisions.flat();
19
+ return jsonResult({
20
+ title,
21
+ revisions,
22
+ count: revisions.length
23
+ });
24
+ }
25
+ catch (error) {
26
+ return errorResult('Failed to get article revisions', error);
27
+ }
28
+ }
29
+ //# sourceMappingURL=get-article-revisions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-article-revisions.js","sourceRoot":"","sources":["../../../src/tools/ro/get-article-revisions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAWhE,MAAM,UAAU,uBAAuB,CAAE,MAAiB;IACzD,OAAO,MAAM,CAAC,IAAI,CACjB,uBAAuB,EACvB,qCAAqC,EACrC;QACC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KAC7E,EACD;QACC,KAAK,EAAE,uBAAuB;QAC9B,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;KACH,EACpB,KAAK,EAAG,EAAE,KAAK,EAAE,EAAG,EAAE,CAAC,6BAA6B,CAAE,KAAK,CAAE,CAC7D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,6BAA6B,CAC3C,KAAsB;IAEtB,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC;QAC3B,MAAM,YAAY,GAAG,MAAM,kBAAkB,CAC5C,GAAG,EACH,qBAAqB,EACrB,KAAK,CACL,CAAC;QAEF,sBAAsB;QACtB,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;QAEtC,OAAO,UAAU,CAAC;YACjB,KAAK;YACL,SAAS;YACT,KAAK,EAAE,SAAS,CAAC,MAAM;SACvB,CAAC,CAAC;IACJ,CAAC;IAAC,OAAQ,KAAK,EAAG,CAAC;QAClB,OAAO,WAAW,CAAC,iCAAiC,EAAE,KAAc,CAAC,CAAC;IACvE,CAAC;AACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function getArticleTool(server: McpServer): RegisteredTool;
3
+ //# sourceMappingURL=get-article.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-article.d.ts","sourceRoot":"","sources":["../../../src/tools/ro/get-article.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAIzF,wBAAgB,cAAc,CAAE,MAAM,EAAE,SAAS,GAAI,cAAc,CAgBlE"}
@@ -0,0 +1,54 @@
1
+ import { z } from 'zod';
2
+ import { getBot, promisifyBotMethod } from '../../common/nodemwBot.js';
3
+ export function getArticleTool(server) {
4
+ return server.tool('get-article', 'Retrieve the content of a wiki article', {
5
+ title: z.string().describe('Article title'),
6
+ followRedirect: z.boolean().optional().default(true).describe('Follow redirects'),
7
+ redirectInfo: z.boolean().optional().default(false).describe('Include information about redirects')
8
+ }, {
9
+ title: 'Get article',
10
+ readOnlyHint: true,
11
+ destructiveHint: false
12
+ }, async ({ title, followRedirect, redirectInfo }) => handleGetArticleTool(title, followRedirect, redirectInfo));
13
+ }
14
+ async function handleGetArticleTool(title, followRedirect, redirectInfo) {
15
+ try {
16
+ const bot = await getBot();
17
+ if (redirectInfo) {
18
+ // When redirectInfo is requested, get both content and redirect info
19
+ const result = await new Promise((resolve, reject) => {
20
+ const callback = (err, content, redirectInfo) => {
21
+ if (err) {
22
+ reject(err);
23
+ }
24
+ else {
25
+ resolve([content, redirectInfo]);
26
+ }
27
+ };
28
+ // @ts-expect-error: any method call
29
+ bot.getArticle(title, followRedirect, callback);
30
+ });
31
+ const [content, redirect] = result;
32
+ const responseText = redirect
33
+ ? `Content:\n\n${content}\n\nRedirect Information:\n\n${JSON.stringify(redirect, null, 2)}`
34
+ : content;
35
+ return {
36
+ content: [{ type: 'text', text: responseText }]
37
+ };
38
+ }
39
+ else {
40
+ // Original behavior: just return content
41
+ const result = await promisifyBotMethod(bot, 'getArticle', title, followRedirect);
42
+ return {
43
+ content: [{ type: 'text', text: result }]
44
+ };
45
+ }
46
+ }
47
+ catch (error) {
48
+ return {
49
+ content: [{ type: 'text', text: `Error: ${error.message}` }],
50
+ isError: true
51
+ };
52
+ }
53
+ }
54
+ //# sourceMappingURL=get-article.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-article.js","sourceRoot":"","sources":["../../../src/tools/ro/get-article.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,MAAM,UAAU,cAAc,CAAE,MAAiB;IAChD,OAAO,MAAM,CAAC,IAAI,CACjB,aAAa,EACb,wCAAwC,EACxC;QACC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAE,eAAe,CAAE;QAC7C,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAE,IAAI,CAAE,CAAC,QAAQ,CAAE,kBAAkB,CAAE;QACrF,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAE,KAAK,CAAE,CAAC,QAAQ,CAAE,qCAAqC,CAAE;KACvG,EACD;QACC,KAAK,EAAE,aAAa;QACpB,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;KACH,EACpB,KAAK,EAAG,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,EAAG,EAAE,CAAC,oBAAoB,CAAE,KAAK,EAAE,cAAc,EAAE,YAAY,CAAE,CAChH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,oBAAoB,CAClC,KAAa,EACb,cAAuB,EACvB,YAAqB;IAErB,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC;QAC3B,IAAI,YAAY,EAAE,CAAC;YAClB,qEAAqE;YACrE,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACvE,MAAM,QAAQ,GAAG,CAAC,GAAiB,EAAE,OAAe,EAAE,YAAqB,EAAE,EAAE;oBAC9E,IAAI,GAAG,EAAE,CAAC;wBACT,MAAM,CAAC,GAAG,CAAC,CAAC;oBACb,CAAC;yBAAM,CAAC;wBACP,OAAO,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;oBAClC,CAAC;gBACF,CAAC,CAAC;gBAEF,oCAAoC;gBACpC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC;YACnC,MAAM,YAAY,GAAG,QAAQ;gBAC5B,CAAC,CAAC,eAAe,OAAO,gCAAgC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;gBAC3F,CAAC,CAAC,OAAO,CAAC;YAEX,OAAO;gBACN,OAAO,EAAE,CAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,CAAE;aACjD,CAAC;QACH,CAAC;aAAM,CAAC;YACP,yCAAyC;YACzC,MAAM,MAAM,GAAG,MAAM,kBAAkB,CACtC,GAAG,EACH,YAAY,EACZ,KAAK,EACL,cAAc,CACd,CAAC;YACF,OAAO;gBACN,OAAO,EAAE,CAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAE;aAC3C,CAAC;QACH,CAAC;IACF,CAAC;IAAC,OAAQ,KAAK,EAAG,CAAC;QAClB,OAAO;YACN,OAAO,EAAE,CAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAa,KAAgB,CAAC,OAAQ,EAAE,EAAE,CAAE;YAC7E,OAAO,EAAE,IAAI;SACb,CAAC;IACH,CAAC;AACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function getBacklinksTool(server: McpServer): RegisteredTool;
3
+ //# sourceMappingURL=get-backlinks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-backlinks.d.ts","sourceRoot":"","sources":["../../../src/tools/ro/get-backlinks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAWzF,wBAAgB,gBAAgB,CAAE,MAAM,EAAE,SAAS,GAAI,cAAc,CAcpE"}
@@ -0,0 +1,27 @@
1
+ import { z } from 'zod';
2
+ import { getBot, promisifyBotMethod } from '../../common/nodemwBot.js';
3
+ import { jsonResult, errorResult } from '../../common/utils.js';
4
+ export function getBacklinksTool(server) {
5
+ return server.tool('get-backlinks', 'Get all backlinks to a specific page', {
6
+ title: z.string().describe('Target page title to find backlinks for')
7
+ }, {
8
+ title: 'Get backlinks',
9
+ readOnlyHint: true,
10
+ destructiveHint: false
11
+ }, async ({ title }) => handleGetBacklinksTool(title));
12
+ }
13
+ async function handleGetBacklinksTool(title) {
14
+ try {
15
+ const bot = await getBot();
16
+ const backlinks = await promisifyBotMethod(bot, 'getBacklinks', title);
17
+ return jsonResult({
18
+ target: title,
19
+ backlinks,
20
+ count: backlinks.length
21
+ });
22
+ }
23
+ catch (error) {
24
+ return errorResult('Failed to get backlinks', error);
25
+ }
26
+ }
27
+ //# sourceMappingURL=get-backlinks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-backlinks.js","sourceRoot":"","sources":["../../../src/tools/ro/get-backlinks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAQhE,MAAM,UAAU,gBAAgB,CAAE,MAAiB;IAClD,OAAO,MAAM,CAAC,IAAI,CACjB,eAAe,EACf,sCAAsC,EACtC;QACC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;KACrE,EACD;QACC,KAAK,EAAE,eAAe;QACtB,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;KACH,EACpB,KAAK,EAAG,EAAE,KAAK,EAAE,EAAG,EAAE,CAAC,sBAAsB,CAAE,KAAK,CAAE,CACtD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,sBAAsB,CACpC,KAAa;IAEb,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,MAAM,kBAAkB,CACzC,GAAG,EACH,cAAc,EACd,KAAK,CACL,CAAC;QAEF,OAAO,UAAU,CAAC;YACjB,MAAM,EAAE,KAAK;YACb,SAAS;YACT,KAAK,EAAE,SAAS,CAAC,MAAM;SACvB,CAAC,CAAC;IACJ,CAAC;IAAC,OAAQ,KAAK,EAAG,CAAC;QAClB,OAAO,WAAW,CAAC,yBAAyB,EAAE,KAAc,CAAC,CAAC;IAC/D,CAAC;AACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function getCategoriesTool(server: McpServer): RegisteredTool;
3
+ //# sourceMappingURL=get-categories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-categories.d.ts","sourceRoot":"","sources":["../../../src/tools/ro/get-categories.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAKzF,wBAAgB,iBAAiB,CAAE,MAAM,EAAE,SAAS,GAAI,cAAc,CAcrE"}
@@ -0,0 +1,27 @@
1
+ import { z } from 'zod';
2
+ import { getBot, promisifyBotMethod } from '../../common/nodemwBot.js';
3
+ import { jsonResult, errorResult } from '../../common/utils.js';
4
+ export function getCategoriesTool(server) {
5
+ return server.tool('get-categories', 'Get all categories matching a prefix', {
6
+ prefix: z.string().optional().default('').describe('Prefix to filter categories')
7
+ }, {
8
+ title: 'Get categories',
9
+ readOnlyHint: true,
10
+ destructiveHint: false
11
+ }, async ({ prefix }) => handleGetCategoriesTool(prefix));
12
+ }
13
+ async function handleGetCategoriesTool(prefix) {
14
+ try {
15
+ const bot = await getBot();
16
+ const results = await promisifyBotMethod(bot, 'getCategories', prefix);
17
+ return jsonResult({
18
+ prefix,
19
+ categories: results,
20
+ count: results.length
21
+ });
22
+ }
23
+ catch (error) {
24
+ return errorResult('Failed to get categories', error);
25
+ }
26
+ }
27
+ //# sourceMappingURL=get-categories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-categories.js","sourceRoot":"","sources":["../../../src/tools/ro/get-categories.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,UAAU,iBAAiB,CAAE,MAAiB;IACnD,OAAO,MAAM,CAAC,IAAI,CACjB,gBAAgB,EAChB,sCAAsC,EACtC;QACC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KACjF,EACD;QACC,KAAK,EAAE,gBAAgB;QACvB,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;KACH,EACpB,KAAK,EAAG,EAAE,MAAM,EAAE,EAAG,EAAE,CAAC,uBAAuB,CAAE,MAAM,CAAE,CACzD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,uBAAuB,CACrC,MAAc;IAEd,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,MAAM,kBAAkB,CACvC,GAAG,EACH,eAAe,EACf,MAAM,CACN,CAAC;QAEF,OAAO,UAAU,CAAC;YACjB,MAAM;YACN,UAAU,EAAE,OAAO;YACnB,KAAK,EAAE,OAAO,CAAC,MAAM;SACrB,CAAC,CAAC;IACJ,CAAC;IAAC,OAAQ,KAAK,EAAG,CAAC;QAClB,OAAO,WAAW,CAAC,0BAA0B,EAAE,KAAc,CAAC,CAAC;IAChE,CAAC;AACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function getExternalLinksTool(server: McpServer): RegisteredTool;
3
+ //# sourceMappingURL=get-external-links.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-external-links.d.ts","sourceRoot":"","sources":["../../../src/tools/ro/get-external-links.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAUzF,wBAAgB,oBAAoB,CAAE,MAAM,EAAE,SAAS,GAAI,cAAc,CAcxE"}
@@ -0,0 +1,27 @@
1
+ import { z } from 'zod';
2
+ import { getBot, promisifyBotMethod } from '../../common/nodemwBot.js';
3
+ import { jsonResult, errorResult } from '../../common/utils.js';
4
+ export function getExternalLinksTool(server) {
5
+ return server.tool('get-external-links', 'Get all external links from an article', {
6
+ title: z.union([z.string(), z.number()]).describe('Article title or page ID')
7
+ }, {
8
+ title: 'Get external links',
9
+ readOnlyHint: true,
10
+ destructiveHint: false
11
+ }, async ({ title }) => handleGetExternalLinksTool(title));
12
+ }
13
+ async function handleGetExternalLinksTool(title) {
14
+ try {
15
+ const bot = await getBot();
16
+ const links = await promisifyBotMethod(bot, 'getExternalLinks', title);
17
+ return jsonResult({
18
+ title,
19
+ links: links.map(link => link['*']),
20
+ count: links.length
21
+ });
22
+ }
23
+ catch (error) {
24
+ return errorResult('Failed to get external links', error);
25
+ }
26
+ }
27
+ //# sourceMappingURL=get-external-links.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-external-links.js","sourceRoot":"","sources":["../../../src/tools/ro/get-external-links.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAOhE,MAAM,UAAU,oBAAoB,CAAE,MAAiB;IACtD,OAAO,MAAM,CAAC,IAAI,CACjB,oBAAoB,EACpB,wCAAwC,EACxC;QACC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KAC7E,EACD;QACC,KAAK,EAAE,oBAAoB;QAC3B,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;KACH,EACpB,KAAK,EAAG,EAAE,KAAK,EAAE,EAAG,EAAE,CAAC,0BAA0B,CAAE,KAAK,CAAE,CAC1D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,0BAA0B,CACxC,KAAsB;IAEtB,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,kBAAkB,CACrC,GAAG,EACH,kBAAkB,EAClB,KAAK,CACL,CAAC;QAEF,OAAO,UAAU,CAAC;YACjB,KAAK;YACL,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnC,KAAK,EAAE,KAAK,CAAC,MAAM;SACnB,CAAC,CAAC;IACJ,CAAC;IAAC,OAAQ,KAAK,EAAG,CAAC;QAClB,OAAO,WAAW,CAAC,8BAA8B,EAAE,KAAc,CAAC,CAAC;IACpE,CAAC;AACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function getImageInfoTool(server: McpServer): RegisteredTool;
3
+ //# sourceMappingURL=get-image-info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-image-info.d.ts","sourceRoot":"","sources":["../../../src/tools/ro/get-image-info.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAiBzF,wBAAgB,gBAAgB,CAAE,MAAM,EAAE,SAAS,GAAI,cAAc,CAcpE"}
@@ -0,0 +1,29 @@
1
+ import { z } from 'zod';
2
+ import { getBot, promisifyBotMethod } from '../../common/nodemwBot.js';
3
+ import { jsonResult, errorResult } from '../../common/utils.js';
4
+ export function getImageInfoTool(server) {
5
+ return server.tool('get-image-info', 'Get detailed information about an image file', {
6
+ filename: z.string().describe('Image filename with File: prefix')
7
+ }, {
8
+ title: 'Get image info',
9
+ readOnlyHint: true,
10
+ destructiveHint: false
11
+ }, async ({ filename }) => handleGetImageInfoTool(filename));
12
+ }
13
+ async function handleGetImageInfoTool(filename) {
14
+ try {
15
+ const bot = await getBot();
16
+ const info = await promisifyBotMethod(bot, 'getImageInfo', filename);
17
+ if (!info) {
18
+ return errorResult(`Image "${filename}" not found.`);
19
+ }
20
+ return jsonResult({
21
+ filename,
22
+ info
23
+ });
24
+ }
25
+ catch (error) {
26
+ return errorResult('Failed to get image info', error);
27
+ }
28
+ }
29
+ //# sourceMappingURL=get-image-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-image-info.js","sourceRoot":"","sources":["../../../src/tools/ro/get-image-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAchE,MAAM,UAAU,gBAAgB,CAAE,MAAiB;IAClD,OAAO,MAAM,CAAC,IAAI,CACjB,gBAAgB,EAChB,8CAA8C,EAC9C;QACC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;KACjE,EACD;QACC,KAAK,EAAE,gBAAgB;QACvB,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;KACH,EACpB,KAAK,EAAG,EAAE,QAAQ,EAAE,EAAG,EAAE,CAAC,sBAAsB,CAAE,QAAQ,CAAE,CAC5D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,sBAAsB,CACpC,QAAgB;IAEhB,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,MAAM,kBAAkB,CACpC,GAAG,EACH,cAAc,EACd,QAAQ,CACR,CAAC;QAEF,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,OAAO,WAAW,CAAC,UAAU,QAAQ,cAAc,CAAC,CAAC;QACtD,CAAC;QAED,OAAO,UAAU,CAAC;YACjB,QAAQ;YACR,IAAI;SACJ,CAAC,CAAC;IACJ,CAAC;IAAC,OAAQ,KAAK,EAAG,CAAC;QAClB,OAAO,WAAW,CAAC,0BAA0B,EAAE,KAAc,CAAC,CAAC;IAChE,CAAC;AACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function getImageUsageTool(server: McpServer): RegisteredTool;
3
+ //# sourceMappingURL=get-image-usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-image-usage.d.ts","sourceRoot":"","sources":["../../../src/tools/ro/get-image-usage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAYzF,wBAAgB,iBAAiB,CAAE,MAAM,EAAE,SAAS,GAAI,cAAc,CAcrE"}
@@ -0,0 +1,27 @@
1
+ import { z } from 'zod';
2
+ import { getBot, promisifyBotMethod } from '../../common/nodemwBot.js';
3
+ import { jsonResult, errorResult } from '../../common/utils.js';
4
+ export function getImageUsageTool(server) {
5
+ return server.tool('get-image-usage', 'Get all pages that use a specific image', {
6
+ filename: z.string().describe('Image filename with File: prefix')
7
+ }, {
8
+ title: 'Get image usage',
9
+ readOnlyHint: true,
10
+ destructiveHint: false
11
+ }, async ({ filename }) => handleGetImageUsageTool(filename));
12
+ }
13
+ async function handleGetImageUsageTool(filename) {
14
+ try {
15
+ const bot = await getBot();
16
+ const pages = await promisifyBotMethod(bot, 'getImageUsage', filename);
17
+ return jsonResult({
18
+ filename,
19
+ pages,
20
+ count: pages.length
21
+ });
22
+ }
23
+ catch (error) {
24
+ return errorResult('Failed to get image usage', error);
25
+ }
26
+ }
27
+ //# sourceMappingURL=get-image-usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-image-usage.js","sourceRoot":"","sources":["../../../src/tools/ro/get-image-usage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAShE,MAAM,UAAU,iBAAiB,CAAE,MAAiB;IACnD,OAAO,MAAM,CAAC,IAAI,CACjB,iBAAiB,EACjB,yCAAyC,EACzC;QACC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;KACjE,EACD;QACC,KAAK,EAAE,iBAAiB;QACxB,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;KACH,EACpB,KAAK,EAAG,EAAE,QAAQ,EAAE,EAAG,EAAE,CAAC,uBAAuB,CAAE,QAAQ,CAAE,CAC7D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,uBAAuB,CACrC,QAAgB;IAEhB,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,kBAAkB,CACrC,GAAG,EACH,eAAe,EACf,QAAQ,CACR,CAAC;QAEF,OAAO,UAAU,CAAC;YACjB,QAAQ;YACR,KAAK;YACL,KAAK,EAAE,KAAK,CAAC,MAAM;SACnB,CAAC,CAAC;IACJ,CAAC;IAAC,OAAQ,KAAK,EAAG,CAAC;QAClB,OAAO,WAAW,CAAC,2BAA2B,EAAE,KAAc,CAAC,CAAC;IACjE,CAAC;AACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function getImagesFromArticleTool(server: McpServer): RegisteredTool;
3
+ //# sourceMappingURL=get-images-from-article.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-images-from-article.d.ts","sourceRoot":"","sources":["../../../src/tools/ro/get-images-from-article.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAWzF,wBAAgB,wBAAwB,CAAE,MAAM,EAAE,SAAS,GAAI,cAAc,CAc5E"}
@@ -0,0 +1,27 @@
1
+ import { z } from 'zod';
2
+ import { getBot, promisifyBotMethod } from '../../common/nodemwBot.js';
3
+ import { jsonResult, errorResult } from '../../common/utils.js';
4
+ export function getImagesFromArticleTool(server) {
5
+ return server.tool('get-images-from-article', 'Get all images embedded in a specific article', {
6
+ title: z.union([z.string(), z.number()]).describe('Article title or page ID')
7
+ }, {
8
+ title: 'Get images from article',
9
+ readOnlyHint: true,
10
+ destructiveHint: false
11
+ }, async ({ title }) => handleGetImagesFromArticleTool(title));
12
+ }
13
+ async function handleGetImagesFromArticleTool(title) {
14
+ try {
15
+ const bot = await getBot();
16
+ const images = await promisifyBotMethod(bot, 'getImagesFromArticle', title);
17
+ return jsonResult({
18
+ title,
19
+ images,
20
+ count: images.length
21
+ });
22
+ }
23
+ catch (error) {
24
+ return errorResult('Failed to get images from article', error);
25
+ }
26
+ }
27
+ //# sourceMappingURL=get-images-from-article.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-images-from-article.js","sourceRoot":"","sources":["../../../src/tools/ro/get-images-from-article.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAQhE,MAAM,UAAU,wBAAwB,CAAE,MAAiB;IAC1D,OAAO,MAAM,CAAC,IAAI,CACjB,yBAAyB,EACzB,+CAA+C,EAC/C;QACC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KAC7E,EACD;QACC,KAAK,EAAE,yBAAyB;QAChC,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;KACH,EACpB,KAAK,EAAG,EAAE,KAAK,EAAE,EAAG,EAAE,CAAC,8BAA8B,CAAE,KAAK,CAAE,CAC9D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,8BAA8B,CAC5C,KAAsB;IAEtB,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,kBAAkB,CACtC,GAAG,EACH,sBAAsB,EACtB,KAAK,CACL,CAAC;QAEF,OAAO,UAAU,CAAC;YACjB,KAAK;YACL,MAAM;YACN,KAAK,EAAE,MAAM,CAAC,MAAM;SACpB,CAAC,CAAC;IACJ,CAAC;IAAC,OAAQ,KAAK,EAAG,CAAC;QAClB,OAAO,WAAW,CAAC,mCAAmC,EAAE,KAAc,CAAC,CAAC;IACzE,CAAC;AACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function getImagesTool(server: McpServer): RegisteredTool;
3
+ //# sourceMappingURL=get-images.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-images.d.ts","sourceRoot":"","sources":["../../../src/tools/ro/get-images.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAYzF,wBAAgB,aAAa,CAAE,MAAM,EAAE,SAAS,GAAI,cAAc,CAejE"}
@@ -0,0 +1,43 @@
1
+ import { z } from 'zod';
2
+ import { getBot } from '../../common/nodemwBot.js';
3
+ import { jsonResult, errorResult } from '../../common/utils.js';
4
+ export function getImagesTool(server) {
5
+ return server.tool('get-images', 'Get list of images starting from a specific name', {
6
+ startFrom: z.string().optional().default('').describe('Start from this image name'),
7
+ limit: z.number().optional().default(50).describe('Maximum number of images to return')
8
+ }, {
9
+ title: 'Get images',
10
+ readOnlyHint: true,
11
+ destructiveHint: false
12
+ }, async ({ startFrom, limit }) => handleGetImagesTool(startFrom, limit));
13
+ }
14
+ async function handleGetImagesTool(startFrom, limit) {
15
+ try {
16
+ const bot = await getBot();
17
+ // getImages has a different callback signature - let's handle it manually
18
+ const images = await new Promise((resolve, reject) => {
19
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
+ bot.getImages(startFrom, (err, ...args) => {
21
+ if (err) {
22
+ reject(err);
23
+ }
24
+ else {
25
+ const imgs = args[0];
26
+ resolve(Array.isArray(imgs) ? imgs : []);
27
+ }
28
+ });
29
+ });
30
+ // Limit results
31
+ const limitedImages = images.slice(0, limit);
32
+ return jsonResult({
33
+ total: images.length,
34
+ limit,
35
+ startFrom,
36
+ images: limitedImages
37
+ });
38
+ }
39
+ catch (error) {
40
+ return errorResult('Failed to get images', error);
41
+ }
42
+ }
43
+ //# sourceMappingURL=get-images.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-images.js","sourceRoot":"","sources":["../../../src/tools/ro/get-images.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,MAAM,EAAsB,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAShE,MAAM,UAAU,aAAa,CAAE,MAAiB;IAC/C,OAAO,MAAM,CAAC,IAAI,CACjB,YAAY,EACZ,kDAAkD,EAClD;QACC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACnF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,oCAAoC,CAAC;KACvF,EACD;QACC,KAAK,EAAE,YAAY;QACnB,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;KACH,EACpB,KAAK,EAAG,EAAE,SAAS,EAAE,KAAK,EAAE,EAAG,EAAE,CAAC,mBAAmB,CAAE,SAAS,EAAE,KAAK,CAAE,CACzE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CACjC,SAAiB,EACjB,KAAa;IAEb,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC;QAC3B,0EAA0E;QAC1E,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC7D,8DAA8D;YAC7D,GAAW,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,GAAiB,EAAE,GAAG,IAAW,EAAE,EAAE;gBACvE,IAAI,GAAG,EAAE,CAAC;oBACT,MAAM,CAAC,GAAG,CAAC,CAAC;gBACb,CAAC;qBAAM,CAAC;oBACP,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oBACrB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC1C,CAAC;YACF,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,gBAAgB;QAChB,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAE7C,OAAO,UAAU,CAAC;YACjB,KAAK,EAAE,MAAM,CAAC,MAAM;YACpB,KAAK;YACL,SAAS;YACT,MAAM,EAAE,aAAa;SACrB,CAAC,CAAC;IACJ,CAAC;IAAC,OAAQ,KAAK,EAAG,CAAC;QAClB,OAAO,WAAW,CAAC,sBAAsB,EAAE,KAAc,CAAC,CAAC;IAC5D,CAAC;AACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function getLogTool(server: McpServer): RegisteredTool;
3
+ //# sourceMappingURL=get-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-log.d.ts","sourceRoot":"","sources":["../../../src/tools/ro/get-log.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAczF,wBAAgB,UAAU,CAAE,MAAM,EAAE,SAAS,GAAI,cAAc,CAgB9D"}