localsbnb-mcp-server 1.0.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.
Files changed (169) hide show
  1. package/README.md +93 -0
  2. package/dist/auth/apiKeyManager.d.ts +61 -0
  3. package/dist/auth/apiKeyManager.d.ts.map +1 -0
  4. package/dist/auth/apiKeyManager.js +121 -0
  5. package/dist/auth/apiKeyManager.js.map +1 -0
  6. package/dist/auth/index.d.ts +3 -0
  7. package/dist/auth/index.d.ts.map +1 -0
  8. package/dist/auth/index.js +3 -0
  9. package/dist/auth/index.js.map +1 -0
  10. package/dist/auth/permissionChecker.d.ts +10 -0
  11. package/dist/auth/permissionChecker.d.ts.map +1 -0
  12. package/dist/auth/permissionChecker.js +45 -0
  13. package/dist/auth/permissionChecker.js.map +1 -0
  14. package/dist/client/cacheManager.d.ts +24 -0
  15. package/dist/client/cacheManager.d.ts.map +1 -0
  16. package/dist/client/cacheManager.js +64 -0
  17. package/dist/client/cacheManager.js.map +1 -0
  18. package/dist/client/httpClient.d.ts +12 -0
  19. package/dist/client/httpClient.d.ts.map +1 -0
  20. package/dist/client/httpClient.js +121 -0
  21. package/dist/client/httpClient.js.map +1 -0
  22. package/dist/client/index.d.ts +4 -0
  23. package/dist/client/index.d.ts.map +1 -0
  24. package/dist/client/index.js +4 -0
  25. package/dist/client/index.js.map +1 -0
  26. package/dist/client/retryHandler.d.ts +18 -0
  27. package/dist/client/retryHandler.d.ts.map +1 -0
  28. package/dist/client/retryHandler.js +68 -0
  29. package/dist/client/retryHandler.js.map +1 -0
  30. package/dist/config/index.d.ts +24 -0
  31. package/dist/config/index.d.ts.map +1 -0
  32. package/dist/config/index.js +39 -0
  33. package/dist/config/index.js.map +1 -0
  34. package/dist/config/tools.d.ts +7 -0
  35. package/dist/config/tools.d.ts.map +1 -0
  36. package/dist/config/tools.js +159 -0
  37. package/dist/config/tools.js.map +1 -0
  38. package/dist/index.d.ts +3 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +34 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/logs/combined.log +30 -0
  43. package/dist/logs/error.log +0 -0
  44. package/dist/package.json +64 -0
  45. package/dist/run.cjs +19 -0
  46. package/dist/run.sh +3 -0
  47. package/dist/server.d.ts +26 -0
  48. package/dist/server.d.ts.map +1 -0
  49. package/dist/server.js +129 -0
  50. package/dist/server.js.map +1 -0
  51. package/dist/start.mjs +34 -0
  52. package/dist/tools/channels/getChannelDetails.d.ts +3 -0
  53. package/dist/tools/channels/getChannelDetails.d.ts.map +1 -0
  54. package/dist/tools/channels/getChannelDetails.js +30 -0
  55. package/dist/tools/channels/getChannelDetails.js.map +1 -0
  56. package/dist/tools/channels/index.d.ts +1 -0
  57. package/dist/tools/channels/index.d.ts.map +1 -0
  58. package/dist/tools/channels/index.js +6 -0
  59. package/dist/tools/channels/index.js.map +1 -0
  60. package/dist/tools/channels/listChannels.d.ts +3 -0
  61. package/dist/tools/channels/listChannels.d.ts.map +1 -0
  62. package/dist/tools/channels/listChannels.js +29 -0
  63. package/dist/tools/channels/listChannels.js.map +1 -0
  64. package/dist/tools/finance/analyzeRevenue.d.ts +3 -0
  65. package/dist/tools/finance/analyzeRevenue.d.ts.map +1 -0
  66. package/dist/tools/finance/analyzeRevenue.js +30 -0
  67. package/dist/tools/finance/analyzeRevenue.js.map +1 -0
  68. package/dist/tools/finance/index.d.ts +2 -0
  69. package/dist/tools/finance/index.d.ts.map +1 -0
  70. package/dist/tools/finance/index.js +8 -0
  71. package/dist/tools/finance/index.js.map +1 -0
  72. package/dist/tools/finance/queryFinancialData.d.ts +3 -0
  73. package/dist/tools/finance/queryFinancialData.d.ts.map +1 -0
  74. package/dist/tools/finance/queryFinancialData.js +30 -0
  75. package/dist/tools/finance/queryFinancialData.js.map +1 -0
  76. package/dist/tools/finance/queryOperationalData.d.ts +3 -0
  77. package/dist/tools/finance/queryOperationalData.d.ts.map +1 -0
  78. package/dist/tools/finance/queryOperationalData.js +30 -0
  79. package/dist/tools/finance/queryOperationalData.js.map +1 -0
  80. package/dist/tools/finance/queryOperationalDataV2.d.ts +3 -0
  81. package/dist/tools/finance/queryOperationalDataV2.d.ts.map +1 -0
  82. package/dist/tools/finance/queryOperationalDataV2.js +125 -0
  83. package/dist/tools/finance/queryOperationalDataV2.js.map +1 -0
  84. package/dist/tools/orders/cancelOrder.d.ts +3 -0
  85. package/dist/tools/orders/cancelOrder.d.ts.map +1 -0
  86. package/dist/tools/orders/cancelOrder.js +27 -0
  87. package/dist/tools/orders/cancelOrder.js.map +1 -0
  88. package/dist/tools/orders/getOrderDetails.d.ts +3 -0
  89. package/dist/tools/orders/getOrderDetails.d.ts.map +1 -0
  90. package/dist/tools/orders/getOrderDetails.js +23 -0
  91. package/dist/tools/orders/getOrderDetails.js.map +1 -0
  92. package/dist/tools/orders/getOrderDetailsV2.d.ts +3 -0
  93. package/dist/tools/orders/getOrderDetailsV2.d.ts.map +1 -0
  94. package/dist/tools/orders/getOrderDetailsV2.js +48 -0
  95. package/dist/tools/orders/getOrderDetailsV2.js.map +1 -0
  96. package/dist/tools/orders/index.d.ts +3 -0
  97. package/dist/tools/orders/index.d.ts.map +1 -0
  98. package/dist/tools/orders/index.js +12 -0
  99. package/dist/tools/orders/index.js.map +1 -0
  100. package/dist/tools/orders/queryOrders.d.ts +3 -0
  101. package/dist/tools/orders/queryOrders.d.ts.map +1 -0
  102. package/dist/tools/orders/queryOrders.js +37 -0
  103. package/dist/tools/orders/queryOrders.js.map +1 -0
  104. package/dist/tools/orders/queryTodayOrders.d.ts +3 -0
  105. package/dist/tools/orders/queryTodayOrders.d.ts.map +1 -0
  106. package/dist/tools/orders/queryTodayOrders.js +159 -0
  107. package/dist/tools/orders/queryTodayOrders.js.map +1 -0
  108. package/dist/tools/rooms/batchUpdatePrices.d.ts +3 -0
  109. package/dist/tools/rooms/batchUpdatePrices.d.ts.map +1 -0
  110. package/dist/tools/rooms/batchUpdatePrices.js +40 -0
  111. package/dist/tools/rooms/batchUpdatePrices.js.map +1 -0
  112. package/dist/tools/rooms/index.d.ts +6 -0
  113. package/dist/tools/rooms/index.d.ts.map +1 -0
  114. package/dist/tools/rooms/index.js +7 -0
  115. package/dist/tools/rooms/index.js.map +1 -0
  116. package/dist/tools/rooms/queryRoomPrices.d.ts +3 -0
  117. package/dist/tools/rooms/queryRoomPrices.d.ts.map +1 -0
  118. package/dist/tools/rooms/queryRoomPrices.js +66 -0
  119. package/dist/tools/rooms/queryRoomPrices.js.map +1 -0
  120. package/dist/tools/rooms/queryRoomStatusNew.d.ts +28 -0
  121. package/dist/tools/rooms/queryRoomStatusNew.d.ts.map +1 -0
  122. package/dist/tools/rooms/queryRoomStatusNew.js +66 -0
  123. package/dist/tools/rooms/queryRoomStatusNew.js.map +1 -0
  124. package/dist/tools/rooms/queryTodayRoomStatus.d.ts +3 -0
  125. package/dist/tools/rooms/queryTodayRoomStatus.d.ts.map +1 -0
  126. package/dist/tools/rooms/queryTodayRoomStatus.js +72 -0
  127. package/dist/tools/rooms/queryTodayRoomStatus.js.map +1 -0
  128. package/dist/tools/rooms/updateRoomPrice.d.ts +3 -0
  129. package/dist/tools/rooms/updateRoomPrice.d.ts.map +1 -0
  130. package/dist/tools/rooms/updateRoomPrice.js +39 -0
  131. package/dist/tools/rooms/updateRoomPrice.js.map +1 -0
  132. package/dist/types/api.d.ts +122 -0
  133. package/dist/types/api.d.ts.map +1 -0
  134. package/dist/types/api.js +3 -0
  135. package/dist/types/api.js.map +1 -0
  136. package/dist/types/index.d.ts +5 -0
  137. package/dist/types/index.d.ts.map +1 -0
  138. package/dist/types/index.js +3 -0
  139. package/dist/types/index.js.map +1 -0
  140. package/dist/types/mcp.d.ts +41 -0
  141. package/dist/types/mcp.d.ts.map +1 -0
  142. package/dist/types/mcp.js +2 -0
  143. package/dist/types/mcp.js.map +1 -0
  144. package/dist/types/tools.d.ts +93 -0
  145. package/dist/types/tools.d.ts.map +1 -0
  146. package/dist/types/tools.js +2 -0
  147. package/dist/types/tools.js.map +1 -0
  148. package/dist/utils/desensitize.d.ts +32 -0
  149. package/dist/utils/desensitize.d.ts.map +1 -0
  150. package/dist/utils/desensitize.js +100 -0
  151. package/dist/utils/desensitize.js.map +1 -0
  152. package/dist/utils/errorHandler.d.ts +21 -0
  153. package/dist/utils/errorHandler.d.ts.map +1 -0
  154. package/dist/utils/errorHandler.js +137 -0
  155. package/dist/utils/errorHandler.js.map +1 -0
  156. package/dist/utils/index.d.ts +5 -0
  157. package/dist/utils/index.d.ts.map +1 -0
  158. package/dist/utils/index.js +5 -0
  159. package/dist/utils/index.js.map +1 -0
  160. package/dist/utils/logger.d.ts +4 -0
  161. package/dist/utils/logger.d.ts.map +1 -0
  162. package/dist/utils/logger.js +37 -0
  163. package/dist/utils/logger.js.map +1 -0
  164. package/dist/utils/validator.d.ts +273 -0
  165. package/dist/utils/validator.d.ts.map +1 -0
  166. package/dist/utils/validator.js +153 -0
  167. package/dist/utils/validator.js.map +1 -0
  168. package/mcp.sample.json +12 -0
  169. package/package.json +64 -0
@@ -0,0 +1,68 @@
1
+ import { logger } from '../utils/logger.js';
2
+ import { AxiosError } from 'axios';
3
+ export class RetryHandler {
4
+ maxRetries;
5
+ baseDelay;
6
+ constructor(maxRetries = 3, baseDelay = 1000) {
7
+ this.maxRetries = maxRetries;
8
+ this.baseDelay = baseDelay;
9
+ }
10
+ /**
11
+ * 执行带重试的请求
12
+ */
13
+ async execute(fn) {
14
+ let lastError;
15
+ for (let attempt = 0; attempt <= this.maxRetries; attempt++) {
16
+ try {
17
+ return await fn();
18
+ }
19
+ catch (error) {
20
+ lastError = error;
21
+ // 如果是最后一次尝试,直接抛出错误
22
+ if (attempt === this.maxRetries) {
23
+ break;
24
+ }
25
+ // 检查是否可重试
26
+ if (!this.isRetryableError(error)) {
27
+ throw error;
28
+ }
29
+ // 计算延迟时间(指数退避)
30
+ const delay = this.baseDelay * Math.pow(2, attempt);
31
+ logger.warn(`Request failed, retrying... (attempt ${attempt + 1}/${this.maxRetries})`, {
32
+ error: error instanceof Error ? error.message : String(error),
33
+ delay,
34
+ });
35
+ await this.sleep(delay);
36
+ }
37
+ }
38
+ // 所有重试都失败,抛出最后一个错误
39
+ throw lastError;
40
+ }
41
+ /**
42
+ * 判断错误是否可重试
43
+ */
44
+ isRetryableError(error) {
45
+ if (error instanceof AxiosError) {
46
+ // 网络错误、超时错误可重试
47
+ if (error.code === 'ECONNRESET' || error.code === 'ETIMEDOUT' || error.code === 'ECONNABORTED') {
48
+ return true;
49
+ }
50
+ // 5xx服务器错误可重试
51
+ if (error.response && error.response.status >= 500) {
52
+ return true;
53
+ }
54
+ // 429速率限制可重试
55
+ if (error.response && error.response.status === 429) {
56
+ return true;
57
+ }
58
+ }
59
+ return false;
60
+ }
61
+ /**
62
+ * 延迟函数
63
+ */
64
+ sleep(ms) {
65
+ return new Promise((resolve) => setTimeout(resolve, ms));
66
+ }
67
+ }
68
+ //# sourceMappingURL=retryHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retryHandler.js","sourceRoot":"","sources":["../../src/client/retryHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAEnC,MAAM,OAAO,YAAY;IAEb;IACA;IAFV,YACU,aAAqB,CAAC,EACtB,YAAoB,IAAI;QADxB,eAAU,GAAV,UAAU,CAAY;QACtB,cAAS,GAAT,SAAS,CAAe;IAC/B,CAAC;IAEJ;;OAEG;IACH,KAAK,CAAC,OAAO,CAAI,EAAoB;QACnC,IAAI,SAAkB,CAAC;QAEvB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;YAC5D,IAAI,CAAC;gBACH,OAAO,MAAM,EAAE,EAAE,CAAC;YACpB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,SAAS,GAAG,KAAK,CAAC;gBAElB,mBAAmB;gBACnB,IAAI,OAAO,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChC,MAAM;gBACR,CAAC;gBAED,UAAU;gBACV,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;oBAClC,MAAM,KAAK,CAAC;gBACd,CAAC;gBAED,eAAe;gBACf,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACpD,MAAM,CAAC,IAAI,CAAC,wCAAwC,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE;oBACrF,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;oBAC7D,KAAK;iBACN,CAAC,CAAC;gBAEH,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,MAAM,SAAS,CAAC;IAClB,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,KAAc;QACrC,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;YAChC,eAAe;YACf,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBAC/F,OAAO,IAAI,CAAC;YACd,CAAC;YAED,cAAc;YACd,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;gBACnD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,aAAa;YACb,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACpD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,EAAU;QACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;CACF"}
@@ -0,0 +1,24 @@
1
+ export interface Config {
2
+ api: {
3
+ baseURL: string;
4
+ timeout: number;
5
+ };
6
+ server: {
7
+ port: number;
8
+ env: string;
9
+ };
10
+ cache: {
11
+ enabled: boolean;
12
+ ttl: number;
13
+ };
14
+ retry: {
15
+ maxRetries: number;
16
+ delay: number;
17
+ };
18
+ log: {
19
+ level: string;
20
+ format: string;
21
+ };
22
+ }
23
+ export declare const config: Config;
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE;QACH,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,KAAK,EAAE;QACL,OAAO,EAAE,OAAO,CAAC;QACjB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,GAAG,EAAE;QACH,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAmBD,eAAO,MAAM,MAAM,EAAE,MAqBpB,CAAC"}
@@ -0,0 +1,39 @@
1
+ import dotenv from 'dotenv';
2
+ // 加载环境变量
3
+ dotenv.config();
4
+ const resolvedEnv = process.env.NODE_ENV || 'production';
5
+ function resolveBaseURL() {
6
+ // 显式配置优先,便于调试或特殊环境
7
+ if (process.env.LUKEYUN_API_BASE_URL) {
8
+ return process.env.LUKEYUN_API_BASE_URL;
9
+ }
10
+ // 根据环境自动选择 API 基础地址
11
+ if (resolvedEnv === 'develop' || resolvedEnv === 'development') {
12
+ return 'https://hudson-dev.localhome.cn';
13
+ }
14
+ // 默认 production
15
+ return 'https://hudson-prod.localhome.cn';
16
+ }
17
+ export const config = {
18
+ api: {
19
+ baseURL: resolveBaseURL(),
20
+ timeout: parseInt(process.env.API_TIMEOUT || '30000', 10),
21
+ },
22
+ server: {
23
+ port: parseInt(process.env.PORT || '3000', 10),
24
+ env: resolvedEnv,
25
+ },
26
+ cache: {
27
+ enabled: process.env.CACHE_ENABLED === 'true',
28
+ ttl: parseInt(process.env.CACHE_TTL || '300000', 10),
29
+ },
30
+ retry: {
31
+ maxRetries: parseInt(process.env.MAX_RETRIES || '3', 10),
32
+ delay: parseInt(process.env.RETRY_DELAY || '1000', 10),
33
+ },
34
+ log: {
35
+ level: process.env.LOG_LEVEL || 'info',
36
+ format: process.env.LOG_FORMAT || 'json',
37
+ },
38
+ };
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,SAAS;AACT,MAAM,CAAC,MAAM,EAAE,CAAC;AAyBhB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,YAAY,CAAC;AAEzD,SAAS,cAAc;IACrB,mBAAmB;IACnB,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;QACrC,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAC1C,CAAC;IAED,oBAAoB;IACpB,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,aAAa,EAAE,CAAC;QAC/D,OAAO,iCAAiC,CAAC;IAC3C,CAAC;IAED,gBAAgB;IAChB,OAAO,kCAAkC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAW;IAC5B,GAAG,EAAE;QACH,OAAO,EAAE,cAAc,EAAE;QACzB,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,EAAE,EAAE,CAAC;KAC1D;IACD,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,EAAE,EAAE,CAAC;QAC9C,GAAG,EAAE,WAAW;KACjB;IACD,KAAK,EAAE;QACL,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,MAAM;QAC7C,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,QAAQ,EAAE,EAAE,CAAC;KACrD;IACD,KAAK,EAAE;QACL,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,EAAE,EAAE,CAAC;QACxD,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,MAAM,EAAE,EAAE,CAAC;KACvD;IACD,GAAG,EAAE;QACH,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;QACtC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,MAAM;KACzC;CACF,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ToolDefinition } from '../types/mcp.js';
2
+ /**
3
+ * 所有工具定义配置
4
+ * 目前只包含已实现的工具
5
+ */
6
+ export declare const toolDefinitions: ToolDefinition[];
7
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/config/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAKtD;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,cAAc,EAsJ3C,CAAC"}
@@ -0,0 +1,159 @@
1
+ import * as roomHandlers from '../tools/rooms/index.js';
2
+ import * as orderHandlers from '../tools/orders/index.js';
3
+ import * as financeHandlers from '../tools/finance/index.js';
4
+ /**
5
+ * 所有工具定义配置
6
+ * 目前只包含已实现的工具
7
+ */
8
+ export const toolDefinitions = [
9
+ // 房态查询工具(仅读)
10
+ {
11
+ name: 'query_room_status_new',
12
+ description: '获取房型日历价(新接口),支持查询指定日期范围的房态和价格信息',
13
+ inputSchema: {
14
+ type: 'object',
15
+ properties: {
16
+ date: {
17
+ type: 'string',
18
+ format: 'date',
19
+ description: '开始日期,格式:YYYY-MM-DD,默认为当天',
20
+ },
21
+ days: {
22
+ type: 'number',
23
+ default: 30,
24
+ minimum: 1,
25
+ description: '查询天数,默认30天',
26
+ },
27
+ roomCategoryIds: {
28
+ type: 'array',
29
+ items: {
30
+ type: 'number',
31
+ },
32
+ description: '房源类型ID列表(可选)',
33
+ },
34
+ roomCategoryGroupIds: {
35
+ type: 'array',
36
+ items: {
37
+ type: 'number',
38
+ },
39
+ description: '房源分组ID列表(可选)',
40
+ },
41
+ channelIds: {
42
+ type: 'array',
43
+ items: {
44
+ type: 'number',
45
+ },
46
+ description: '渠道ID列表(可选)',
47
+ },
48
+ searchKey: {
49
+ type: 'string',
50
+ description: '模糊搜索:房源编码、房源简称、房源名称(可选)',
51
+ },
52
+ pageNum: {
53
+ type: 'number',
54
+ default: 1,
55
+ minimum: 1,
56
+ description: '页码,默认1',
57
+ },
58
+ pageSize: {
59
+ type: 'number',
60
+ default: 15,
61
+ minimum: 1,
62
+ maximum: 100,
63
+ description: '每页数量,默认15,最大100',
64
+ },
65
+ },
66
+ required: [],
67
+ },
68
+ handler: roomHandlers.queryRoomStatusNewHandler,
69
+ requiredScopes: ['rooms:read'],
70
+ },
71
+ {
72
+ name: 'query_today_room_status',
73
+ description: '查询今日的房态情况,包括房间状态、订单信息等。支持关键词:今日房态、今日房态查询、今日房态统计、今日房态分析、今日房态报表、今日房态展示、今日房态可视化、今日房态仪表盘、今日房态报告、今日房态图表、今日房态表格、房态查询、房态',
74
+ inputSchema: {
75
+ type: 'object',
76
+ properties: {
77
+ date: {
78
+ type: 'string',
79
+ format: 'date',
80
+ description: '日期,格式:YYYY-MM-DD,默认为当天',
81
+ },
82
+ },
83
+ required: [],
84
+ },
85
+ handler: roomHandlers.queryTodayRoomStatusHandler,
86
+ requiredScopes: ['rooms:read'],
87
+ },
88
+ {
89
+ name: 'query_room_prices',
90
+ description: '查询房价情况,支持查询指定天数的价格信息,默认查询7天,最多30天。支持关键词:房价、近期房价、本月房间、XXX天房价、今日房价查询、今日房价统计、今日房价分析、今日房价报表、今日房价展示、今日房价可视化、今日房价仪表盘、今日房价报告、今日房价图表、今日房价表格、房价查询',
91
+ inputSchema: {
92
+ type: 'object',
93
+ properties: {
94
+ date: {
95
+ type: 'string',
96
+ format: 'date',
97
+ description: '开始日期,格式:YYYY-MM-DD,默认为当天',
98
+ },
99
+ days: {
100
+ type: 'number',
101
+ default: 7,
102
+ minimum: 1,
103
+ maximum: 30,
104
+ description: '查询天数,默认7天,最多30天。用户可描述说要30天价格或者15天价格',
105
+ },
106
+ },
107
+ required: [],
108
+ },
109
+ handler: roomHandlers.queryRoomPricesHandler,
110
+ requiredScopes: ['rooms:read'],
111
+ },
112
+ // 订单管理工具(仅读)
113
+ {
114
+ name: 'query_today_orders',
115
+ description: '查询今日订单情况,包括预抵、在住、预离三种类型的订单。支持关键词:今日订单、待办事项、待办订单、今日订单查询、今日订单统计、今日订单分析、今日订单报表、今日订单展示、今日订单可视化、今日订单仪表盘、今日订单报告、今日订单图表、今日订单表格',
116
+ inputSchema: {
117
+ type: 'object',
118
+ properties: {},
119
+ required: [],
120
+ },
121
+ handler: orderHandlers.queryTodayOrdersHandler,
122
+ requiredScopes: ['orders:read'],
123
+ },
124
+ {
125
+ name: 'get_order_details_v2',
126
+ description: '根据订单ID查询订单详情信息。支持关键词:XXX订单详情、订单详情、订单详情查询、订单详情统计、订单详情分析、订单详情报表、订单详情展示、订单详情可视化、订单详情仪表盘、订单详情报告、订单详情图表、订单详情表格。用户可以获取到今日订单后,描述订单id,然后进行查询详情',
127
+ inputSchema: {
128
+ type: 'object',
129
+ properties: {
130
+ orderId: {
131
+ type: 'string',
132
+ description: '订单ID',
133
+ },
134
+ },
135
+ required: ['orderId'],
136
+ },
137
+ handler: orderHandlers.getOrderDetailsV2Handler,
138
+ requiredScopes: ['orders:read'],
139
+ },
140
+ // 运营数据工具
141
+ {
142
+ name: 'query_operational_data_v2',
143
+ description: '查询当前基础的运营数据,包括夜审数据、首页报表、经营分析等。支持关键词:当前运营情况、今天数据、数据、经营情况、运营数据、运营数据查询、运营数据统计、运营数据分析、运营数据报表、运营数据展示、运营数据可视化、运营数据仪表盘、运营数据报告、运营数据图表、运营数据表格。如果可以呈现可视化表格,则使用可视化表格呈现',
144
+ inputSchema: {
145
+ type: 'object',
146
+ properties: {
147
+ date: {
148
+ type: 'string',
149
+ format: 'date',
150
+ description: '日期,格式:YYYY-MM-DD,默认为当天',
151
+ },
152
+ },
153
+ required: [],
154
+ },
155
+ handler: financeHandlers.queryOperationalDataV2Handler,
156
+ requiredScopes: ['finance:read'],
157
+ },
158
+ ];
159
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/config/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env node
2
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import { LukeyunMCPServer } from './server.js';
4
+ import { logger } from './utils/logger.js';
5
+ async function main() {
6
+ try {
7
+ // 创建MCP Server实例
8
+ const server = new LukeyunMCPServer();
9
+ await server.start();
10
+ // 创建StdIO传输层(用于Claude Desktop等本地连接)
11
+ const transport = new StdioServerTransport();
12
+ await server.getServer().connect(transport);
13
+ logger.info('MCP Server connected via StdIO');
14
+ }
15
+ catch (error) {
16
+ logger.error('Failed to start MCP Server', error instanceof Error ? error : new Error(String(error)));
17
+ process.exit(1);
18
+ }
19
+ }
20
+ // 处理未捕获的异常
21
+ process.on('uncaughtException', (error) => {
22
+ logger.error('Uncaught exception', error);
23
+ process.exit(1);
24
+ });
25
+ process.on('unhandledRejection', (reason) => {
26
+ logger.error('Unhandled rejection', new Error(String(reason)));
27
+ process.exit(1);
28
+ });
29
+ // 启动服务器
30
+ main().catch((error) => {
31
+ logger.error('Fatal error', error instanceof Error ? error : new Error(String(error)));
32
+ process.exit(1);
33
+ });
34
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,iBAAiB;QACjB,MAAM,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACtC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QAErB,oCAAoC;QACpC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC7C,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAE5C,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,WAAW;AACX,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;IACxC,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;IAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;IAC1C,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,QAAQ;AACR,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,30 @@
1
+ {"level":"info","message":"MCP Server handlers setup completed","timestamp":"2026-03-17 11:29:36","toolCount":6}
2
+ {"level":"warn","message":"API key not found in environment variables","timestamp":"2026-03-17 11:29:36"}
3
+ {"level":"info","message":"Hudson credentials loaded from environment","timestamp":"2026-03-17 11:29:36"}
4
+ {"hasAPIKey":false,"hasCampId":true,"hasHudsonAuth":true,"level":"info","message":"MCP Server initialized","scopes":[],"timestamp":"2026-03-17 11:29:36"}
5
+ {"level":"info","message":"MCP Server started","timestamp":"2026-03-17 11:29:36"}
6
+ {"level":"info","message":"MCP Server connected via StdIO","timestamp":"2026-03-17 11:29:36"}
7
+ {"level":"info","message":"MCP Server handlers setup completed","timestamp":"2026-03-17 11:29:37","toolCount":6}
8
+ {"level":"warn","message":"API key not found in environment variables","timestamp":"2026-03-17 11:29:37"}
9
+ {"level":"info","message":"Hudson credentials loaded from environment","timestamp":"2026-03-17 11:29:37"}
10
+ {"hasAPIKey":false,"hasCampId":true,"hasHudsonAuth":true,"level":"info","message":"MCP Server initialized","scopes":[],"timestamp":"2026-03-17 11:29:37"}
11
+ {"level":"info","message":"MCP Server started","timestamp":"2026-03-17 11:29:37"}
12
+ {"level":"info","message":"MCP Server connected via StdIO","timestamp":"2026-03-17 11:29:37"}
13
+ {"level":"info","message":"MCP Server handlers setup completed","timestamp":"2026-03-17 11:29:37","toolCount":6}
14
+ {"level":"warn","message":"API key not found in environment variables","timestamp":"2026-03-17 11:29:37"}
15
+ {"level":"info","message":"Hudson credentials loaded from environment","timestamp":"2026-03-17 11:29:37"}
16
+ {"hasAPIKey":false,"hasCampId":true,"hasHudsonAuth":true,"level":"info","message":"MCP Server initialized","scopes":[],"timestamp":"2026-03-17 11:29:37"}
17
+ {"level":"info","message":"MCP Server started","timestamp":"2026-03-17 11:29:37"}
18
+ {"level":"info","message":"MCP Server connected via StdIO","timestamp":"2026-03-17 11:29:37"}
19
+ {"level":"info","message":"MCP Server handlers setup completed","timestamp":"2026-03-17 11:29:38","toolCount":6}
20
+ {"level":"warn","message":"API key not found in environment variables","timestamp":"2026-03-17 11:29:38"}
21
+ {"level":"info","message":"Hudson credentials loaded from environment","timestamp":"2026-03-17 11:29:38"}
22
+ {"hasAPIKey":false,"hasCampId":true,"hasHudsonAuth":true,"level":"info","message":"MCP Server initialized","scopes":[],"timestamp":"2026-03-17 11:29:38"}
23
+ {"level":"info","message":"MCP Server started","timestamp":"2026-03-17 11:29:38"}
24
+ {"level":"info","message":"MCP Server connected via StdIO","timestamp":"2026-03-17 11:29:38"}
25
+ {"level":"info","message":"MCP Server handlers setup completed","timestamp":"2026-03-17 11:29:38","toolCount":6}
26
+ {"level":"warn","message":"API key not found in environment variables","timestamp":"2026-03-17 11:29:38"}
27
+ {"level":"info","message":"Hudson credentials loaded from environment","timestamp":"2026-03-17 11:29:38"}
28
+ {"hasAPIKey":false,"hasCampId":true,"hasHudsonAuth":true,"level":"info","message":"MCP Server initialized","scopes":[],"timestamp":"2026-03-17 11:29:38"}
29
+ {"level":"info","message":"MCP Server started","timestamp":"2026-03-17 11:29:38"}
30
+ {"level":"info","message":"MCP Server connected via StdIO","timestamp":"2026-03-17 11:29:38"}
File without changes
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "localsbnb-mcp-server",
3
+ "version": "1.0.0",
4
+ "description": "LocalsBnb MCP Server",
5
+ "main": "dist/index.js",
6
+ "type": "module",
7
+ "scripts": {
8
+ "build": "tsc && cp dist/index.js dist/start.mjs && cp scripts/run-mcp.cjs dist/run.cjs && cp scripts/run-mcp.sh dist/run.sh && cp package.json dist/package.json && chmod +x dist/run.sh dist/start.sh 2>/dev/null || true",
9
+ "build:prod": "tsc -p tsconfig.prod.json && cp dist/index.js dist/start.mjs && cp scripts/run-mcp.cjs dist/run.cjs && cp scripts/run-mcp.sh dist/run.sh && cp package.json dist/package.json && node scripts/obfuscate-dist.cjs && chmod +x dist/run.sh 2>/dev/null || true",
10
+ "prepublishOnly": "npm run build",
11
+ "dev": "tsx watch src/index.ts",
12
+ "start": "node dist/index.js",
13
+ "test": "jest",
14
+ "test:watch": "jest --watch",
15
+ "test:api": "node test-api.js",
16
+ "lint": "eslint src --ext .ts",
17
+ "lint:fix": "eslint src --ext .ts --fix",
18
+ "format": "prettier --write \"src/**/*.ts\"",
19
+ "type-check": "tsc --noEmit"
20
+ },
21
+ "keywords": [
22
+ "localsbnb",
23
+ "mcp",
24
+ "model-context-protocol",
25
+ "lukeyun",
26
+ "pms",
27
+ "hotel-management",
28
+ "cursor",
29
+ "claude"
30
+ ],
31
+ "author": "Lukeyun",
32
+ "license": "MIT",
33
+ "dependencies": {
34
+ "@modelcontextprotocol/sdk": "^0.5.0",
35
+ "axios": "^1.6.0",
36
+ "dotenv": "^16.3.1",
37
+ "winston": "^3.11.0",
38
+ "zod": "^3.22.4"
39
+ },
40
+ "bin": {
41
+ "localsbnb-mcp": "dist/run.cjs",
42
+ "lukeyun-pms-mcp": "dist/run.cjs"
43
+ },
44
+ "devDependencies": {
45
+ "javascript-obfuscator": "^4.1.1",
46
+ "@types/node": "^20.10.0",
47
+ "@typescript-eslint/eslint-plugin": "^6.13.0",
48
+ "@typescript-eslint/parser": "^6.13.0",
49
+ "eslint": "^8.54.0",
50
+ "jest": "^29.7.0",
51
+ "prettier": "^3.1.0",
52
+ "ts-jest": "^29.1.1",
53
+ "tsx": "^4.6.0",
54
+ "typescript": "^5.3.2"
55
+ },
56
+ "engines": {
57
+ "node": ">=18.0.0"
58
+ },
59
+ "files": [
60
+ "dist",
61
+ "README.md",
62
+ "mcp.sample.json"
63
+ ]
64
+ }
package/dist/run.cjs ADDED
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CommonJS 启动器:在 Cursor 等环境下通过子进程启动 ESM 入口 start.mjs。
4
+ * 子进程移除 NODE_OPTIONS,避免 --require 等导致 ESM 被当成 CJS 加载。
5
+ */
6
+ const path = require('path');
7
+ const { spawnSync } = require('child_process');
8
+
9
+ const dir = __dirname;
10
+ const entry = path.join(dir, 'start.mjs');
11
+ const env = { ...process.env };
12
+ delete env.NODE_OPTIONS;
13
+
14
+ const result = spawnSync(process.execPath, [entry], {
15
+ stdio: 'inherit',
16
+ cwd: dir,
17
+ env,
18
+ });
19
+ process.exit(result.status !== null ? result.status : 1);
package/dist/run.sh ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env sh
2
+ # 用 sh 直接 exec node start.mjs,避免 Cursor 侧用 CJS 加载导致 ERR_REQUIRE_ESM
3
+ cd "$(dirname "$0")" && exec node start.mjs
@@ -0,0 +1,26 @@
1
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
+ export declare class LukeyunMCPServer {
3
+ private server;
4
+ private apiKeyManager;
5
+ private permissionChecker;
6
+ private apiClient;
7
+ private campId;
8
+ constructor();
9
+ /**
10
+ * 初始化服务器
11
+ */
12
+ initialize(): Promise<void>;
13
+ /**
14
+ * 设置MCP协议处理器
15
+ */
16
+ private setupHandlers;
17
+ /**
18
+ * 启动服务器
19
+ */
20
+ start(): Promise<void>;
21
+ /**
22
+ * 获取Server实例(用于连接传输层)
23
+ */
24
+ getServer(): Server;
25
+ }
26
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAUnE,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,MAAM,CAAuB;;IAqBrC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAqCjC;;OAEG;IACH,OAAO,CAAC,aAAa;IA+DrB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;OAEG;IACH,SAAS,IAAI,MAAM;CAGpB"}