@kelvinjhu/lexiang-search 1.0.0 → 1.0.2

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 (55) hide show
  1. package/README.md +48 -183
  2. package/dist/cli.d.ts +1 -1
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +8 -9
  5. package/dist/cli.js.map +1 -1
  6. package/dist/constants/api.constants.d.ts.map +1 -1
  7. package/dist/constants/api.constants.js +17 -15
  8. package/dist/constants/api.constants.js.map +1 -1
  9. package/dist/dto/ai-qa-request.dto.d.ts +8 -9
  10. package/dist/dto/ai-qa-request.dto.d.ts.map +1 -1
  11. package/dist/dto/ai-qa-request.dto.js +49 -62
  12. package/dist/dto/ai-qa-request.dto.js.map +1 -1
  13. package/dist/dto/ai-qa-response.dto.d.ts.map +1 -1
  14. package/dist/dto/ai-qa-response.dto.js +16 -20
  15. package/dist/dto/ai-qa-response.dto.js.map +1 -1
  16. package/dist/index.d.ts +1 -1
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +6 -7
  19. package/dist/index.js.map +1 -1
  20. package/dist/server.d.ts.map +1 -1
  21. package/dist/server.js +57 -32
  22. package/dist/server.js.map +1 -1
  23. package/dist/services/ai-qa.service.d.ts +12 -3
  24. package/dist/services/ai-qa.service.d.ts.map +1 -1
  25. package/dist/services/ai-qa.service.js +60 -34
  26. package/dist/services/ai-qa.service.js.map +1 -1
  27. package/dist/services/lexiang-api.service.d.ts +6 -2
  28. package/dist/services/lexiang-api.service.d.ts.map +1 -1
  29. package/dist/services/lexiang-api.service.js +76 -57
  30. package/dist/services/lexiang-api.service.js.map +1 -1
  31. package/dist/tools/ai-qa-stream.tool.d.ts +1 -9
  32. package/dist/tools/ai-qa-stream.tool.d.ts.map +1 -1
  33. package/dist/tools/ai-qa-stream.tool.js +36 -71
  34. package/dist/tools/ai-qa-stream.tool.js.map +1 -1
  35. package/dist/tools/ai-qa.tool.d.ts +1 -9
  36. package/dist/tools/ai-qa.tool.d.ts.map +1 -1
  37. package/dist/tools/ai-qa.tool.js +11 -23
  38. package/dist/tools/ai-qa.tool.js.map +1 -1
  39. package/dist/types/lexiang-api.types.js +1 -2
  40. package/dist/types/lexiang-api.types.js.map +1 -1
  41. package/dist/types/mcp.types.js +1 -2
  42. package/dist/types/mcp.types.js.map +1 -1
  43. package/dist/utils/error-handler.d.ts +37 -32
  44. package/dist/utils/error-handler.d.ts.map +1 -1
  45. package/dist/utils/error-handler.js +46 -79
  46. package/dist/utils/error-handler.js.map +1 -1
  47. package/dist/utils/logger.d.ts +1 -0
  48. package/dist/utils/logger.d.ts.map +1 -1
  49. package/dist/utils/logger.js +6 -8
  50. package/dist/utils/logger.js.map +1 -1
  51. package/dist/utils/validator.d.ts +4 -15
  52. package/dist/utils/validator.d.ts.map +1 -1
  53. package/dist/utils/validator.js +17 -66
  54. package/dist/utils/validator.js.map +1 -1
  55. package/package.json +6 -5
@@ -1 +1 @@
1
- {"version":3,"file":"ai-qa-response.dto.d.ts","sourceRoot":"","sources":["../../src/dto/ai-qa-response.dto.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qBAAa,iBAAiB;IAC5B,OAAO,EAAG,MAAM,CAAC;IACjB,SAAS,EAAG,MAAM,CAAC;IACnB,WAAW,EAAG,MAAM,CAAC;IACrB,KAAK,EAAG,MAAM,CAAC;IACf,GAAG,EAAG,MAAM,CAAC;CACd;AAED,qBAAa,eAAe;IAC1B,KAAK,EAAG,MAAM,CAAC;IACf,GAAG,EAAG,MAAM,CAAC;CACd;AAED,qBAAa,oBAAoB;IAC/B,kBAAkB,EAAG,MAAM,CAAC;IAC5B,gBAAgB,EAAG,iBAAiB,EAAE,CAAC;IACvC,cAAc,EAAG,eAAe,EAAE,CAAC;CACpC;AAED,qBAAa,mBAAmB;IAC9B,OAAO,EAAG,MAAM,CAAC;IACjB,aAAa,EAAG,MAAM,CAAC;IACvB,UAAU,EAAG,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAG,oBAAoB,CAAC;CAC3C;AAED,qBAAa,eAAe;IAC1B,IAAI,EAAG,MAAM,CAAC;IACd,OAAO,EAAG,MAAM,CAAC;IACjB,UAAU,EAAG,MAAM,CAAC;IACpB,IAAI,EAAG,mBAAmB,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,mBAAmB,GAAG;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxD,CAWA"}
1
+ {"version":3,"file":"ai-qa-response.dto.d.ts","sourceRoot":"","sources":["../../src/dto/ai-qa-response.dto.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qBAAa,iBAAiB;IAC5B,OAAO,EAAG,MAAM,CAAC;IACjB,SAAS,EAAG,MAAM,CAAC;IACnB,WAAW,EAAG,MAAM,CAAC;IACrB,KAAK,EAAG,MAAM,CAAC;IACf,GAAG,EAAG,MAAM,CAAC;CACd;AAED,qBAAa,eAAe;IAC1B,KAAK,EAAG,MAAM,CAAC;IACf,GAAG,EAAG,MAAM,CAAC;CACd;AAED,qBAAa,oBAAoB;IAC/B,kBAAkB,EAAG,MAAM,CAAC;IAC5B,gBAAgB,EAAG,iBAAiB,EAAE,CAAC;IACvC,cAAc,EAAG,eAAe,EAAE,CAAC;CACpC;AAED,qBAAa,mBAAmB;IAC9B,OAAO,EAAG,MAAM,CAAC;IACjB,aAAa,EAAG,MAAM,CAAC;IACvB,UAAU,EAAG,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAG,oBAAoB,CAAC;CAC3C;AAED,qBAAa,eAAe;IAC1B,IAAI,EAAG,MAAM,CAAC;IACd,OAAO,EAAG,MAAM,CAAC;IACjB,UAAU,EAAG,MAAM,CAAC;IACpB,IAAI,EAAG,mBAAmB,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,mBAAmB,GAAG;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxD,CAkBA"}
@@ -1,57 +1,53 @@
1
- "use strict";
2
1
  /**
3
2
  * AI问答响应DTO
4
3
  */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.AiQaResponseDto = exports.AiQaResponseDataDto = exports.AdditionalContentDto = exports.ReferenceDocDto = exports.ReferenceChunkDto = void 0;
7
- exports.toMcpResponse = toMcpResponse;
8
- class ReferenceChunkDto {
4
+ export class ReferenceChunkDto {
9
5
  content;
10
6
  target_id;
11
7
  target_type;
12
8
  title;
13
9
  url;
14
10
  }
15
- exports.ReferenceChunkDto = ReferenceChunkDto;
16
- class ReferenceDocDto {
11
+ export class ReferenceDocDto {
17
12
  title;
18
13
  url;
19
14
  }
20
- exports.ReferenceDocDto = ReferenceDocDto;
21
- class AdditionalContentDto {
15
+ export class AdditionalContentDto {
22
16
  generated_question;
23
17
  reference_chunks;
24
18
  reference_docs;
25
19
  }
26
- exports.AdditionalContentDto = AdditionalContentDto;
27
- class AiQaResponseDataDto {
20
+ export class AiQaResponseDataDto {
28
21
  content;
29
22
  answer_source;
30
23
  session_id;
31
24
  reasoning_content;
32
25
  additional_content;
33
26
  }
34
- exports.AiQaResponseDataDto = AiQaResponseDataDto;
35
- class AiQaResponseDto {
27
+ export class AiQaResponseDto {
36
28
  code;
37
29
  message;
38
30
  request_id;
39
31
  data;
40
32
  }
41
- exports.AiQaResponseDto = AiQaResponseDto;
42
33
  /**
43
34
  * 转换为MCP响应格式
44
35
  */
45
- function toMcpResponse(data) {
36
+ export function toMcpResponse(data) {
37
+ // 处理空内容,避免Claude困惑
38
+ const content = data.content && data.content.trim().length > 0
39
+ ? data.content
40
+ : "抱歉,在指定的知识范围内未找到相关内容。";
41
+ const reference_docs = data.additional_content?.reference_docs?.map((doc) => ({
42
+ title: doc.title,
43
+ url: doc.url,
44
+ })) || [];
46
45
  return {
47
- content: data.content,
46
+ content,
48
47
  answer_source: data.answer_source,
49
48
  session_id: data.session_id,
50
49
  reasoning_content: data.reasoning_content,
51
- reference_docs: data.additional_content.reference_docs.map((doc) => ({
52
- title: doc.title,
53
- url: doc.url,
54
- })),
50
+ reference_docs,
55
51
  };
56
52
  }
57
53
  //# sourceMappingURL=ai-qa-response.dto.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-qa-response.dto.js","sourceRoot":"","sources":["../../src/dto/ai-qa-response.dto.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAuCH,sCAiBC;AAtDD,MAAa,iBAAiB;IAC5B,OAAO,CAAU;IACjB,SAAS,CAAU;IACnB,WAAW,CAAU;IACrB,KAAK,CAAU;IACf,GAAG,CAAU;CACd;AAND,8CAMC;AAED,MAAa,eAAe;IAC1B,KAAK,CAAU;IACf,GAAG,CAAU;CACd;AAHD,0CAGC;AAED,MAAa,oBAAoB;IAC/B,kBAAkB,CAAU;IAC5B,gBAAgB,CAAuB;IACvC,cAAc,CAAqB;CACpC;AAJD,oDAIC;AAED,MAAa,mBAAmB;IAC9B,OAAO,CAAU;IACjB,aAAa,CAAU;IACvB,UAAU,CAAU;IACpB,iBAAiB,CAAU;IAC3B,kBAAkB,CAAwB;CAC3C;AAND,kDAMC;AAED,MAAa,eAAe;IAC1B,IAAI,CAAU;IACd,OAAO,CAAU;IACjB,UAAU,CAAU;IACpB,IAAI,CAAuB;CAC5B;AALD,0CAKC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,IAAyB;IAOrD,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;QACzC,cAAc,EAAE,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACnE,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,GAAG,EAAE,GAAG,CAAC,GAAG;SACb,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"ai-qa-response.dto.js","sourceRoot":"","sources":["../../src/dto/ai-qa-response.dto.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,OAAO,iBAAiB;IAC5B,OAAO,CAAU;IACjB,SAAS,CAAU;IACnB,WAAW,CAAU;IACrB,KAAK,CAAU;IACf,GAAG,CAAU;CACd;AAED,MAAM,OAAO,eAAe;IAC1B,KAAK,CAAU;IACf,GAAG,CAAU;CACd;AAED,MAAM,OAAO,oBAAoB;IAC/B,kBAAkB,CAAU;IAC5B,gBAAgB,CAAuB;IACvC,cAAc,CAAqB;CACpC;AAED,MAAM,OAAO,mBAAmB;IAC9B,OAAO,CAAU;IACjB,aAAa,CAAU;IACvB,UAAU,CAAU;IACpB,iBAAiB,CAAU;IAC3B,kBAAkB,CAAwB;CAC3C;AAED,MAAM,OAAO,eAAe;IAC1B,IAAI,CAAU;IACd,OAAO,CAAU;IACjB,UAAU,CAAU;IACpB,IAAI,CAAuB;CAC5B;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAAyB;IAOrD,mBAAmB;IACnB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QAC5D,CAAC,CAAC,IAAI,CAAC,OAAO;QACd,CAAC,CAAC,sBAAsB,CAAC;IAE3B,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5E,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,GAAG,EAAE,GAAG,CAAC,GAAG;KACb,CAAC,CAAC,IAAI,EAAE,CAAC;IAEV,OAAO;QACL,OAAO;QACP,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;QACzC,cAAc;KACf,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
2
  * MCP服务器入口
3
3
  */
4
- export {};
4
+ import 'reflect-metadata';
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -1,18 +1,17 @@
1
- "use strict";
2
1
  /**
3
2
  * MCP服务器入口
4
3
  */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const server_1 = require("./server");
7
- const logger_1 = require("./utils/logger");
4
+ import 'reflect-metadata'; // 必须在最前面引入
5
+ import { LexiangMcpServer } from './server.js';
6
+ import { logger } from './utils/logger.js';
8
7
  /**
9
8
  * 启动MCP服务器
10
9
  */
11
10
  async function main() {
12
- const server = new server_1.LexiangMcpServer();
11
+ const server = new LexiangMcpServer();
13
12
  // 优雅关闭处理
14
13
  const shutdown = async (signal) => {
15
- logger_1.logger.info(`Received ${signal}, shutting down gracefully...`);
14
+ logger.info(`Received ${signal}, shutting down gracefully...`);
16
15
  await server.stop();
17
16
  process.exit(0);
18
17
  };
@@ -23,7 +22,7 @@ async function main() {
23
22
  }
24
23
  // 启动应用
25
24
  main().catch((error) => {
26
- logger_1.logger.error('Fatal error', { error });
25
+ logger.error('Fatal error', { error });
27
26
  process.exit(1);
28
27
  });
29
28
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,qCAA4C;AAC5C,2CAAwC;AAExC;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,IAAI,yBAAgB,EAAE,CAAC;IAEtC,SAAS;IACT,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAc,EAAiB,EAAE;QACvD,eAAM,CAAC,IAAI,CAAC,YAAY,MAAM,+BAA+B,CAAC,CAAC;QAC/D,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE/C,QAAQ;IACR,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC;AAED,OAAO;AACP,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,eAAM,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,kBAAkB,CAAC,CAAC,WAAW;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAEtC,SAAS;IACT,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAc,EAAiB,EAAE;QACvD,MAAM,CAAC,IAAI,CAAC,YAAY,MAAM,+BAA+B,CAAC,CAAC;QAC/D,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE/C,QAAQ;IACR,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC;AAED,OAAO;AACP,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAiG;;IAoBrH;;OAEG;IACH,OAAO,CAAC,aAAa;IAYrB;;OAEG;IACH,OAAO,CAAC,aAAa;IA0CrB;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBnC;;OAEG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAUnC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAiG;;IAoBrH;;OAEG;IACH,OAAO,CAAC,aAAa;IAYrB;;OAEG;IACH,OAAO,CAAC,aAAa;IA2ErB;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBnC;;OAEG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAUnC"}
package/dist/server.js CHANGED
@@ -1,24 +1,21 @@
1
- "use strict";
2
1
  /**
3
2
  * MCP服务器核心实现
4
3
  */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.LexiangMcpServer = void 0;
7
- const index_1 = require("@modelcontextprotocol/sdk/server/index");
8
- const stdio_1 = require("@modelcontextprotocol/sdk/server/stdio");
9
- const types_1 = require("@modelcontextprotocol/sdk/types");
10
- const logger_1 = require("./utils/logger");
11
- const error_handler_1 = require("./utils/error-handler");
12
- const ai_qa_tool_1 = require("./tools/ai-qa.tool");
13
- const ai_qa_stream_tool_1 = require("./tools/ai-qa-stream.tool");
4
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
5
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
6
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
7
+ import { logger } from './utils/logger.js';
8
+ import { handleError } from './utils/error-handler.js';
9
+ import { AiQaToolHandler } from './tools/ai-qa.tool.js';
10
+ import { AiQaStreamToolHandler } from './tools/ai-qa-stream.tool.js';
14
11
  /**
15
12
  * 乐享AI问答MCP服务器
16
13
  */
17
- class LexiangMcpServer {
14
+ export class LexiangMcpServer {
18
15
  server;
19
16
  toolHandlers;
20
17
  constructor() {
21
- this.server = new index_1.Server({
18
+ this.server = new Server({
22
19
  name: 'mcp-lexiang-search',
23
20
  version: '1.0.0',
24
21
  }, {
@@ -34,11 +31,11 @@ class LexiangMcpServer {
34
31
  * 注册工具处理器
35
32
  */
36
33
  registerTools() {
37
- const aiQaHandler = new ai_qa_tool_1.AiQaToolHandler();
38
- const aiQaStreamHandler = new ai_qa_stream_tool_1.AiQaStreamToolHandler();
34
+ const aiQaHandler = new AiQaToolHandler();
35
+ const aiQaStreamHandler = new AiQaStreamToolHandler();
39
36
  this.toolHandlers.set(aiQaHandler.name, aiQaHandler);
40
37
  this.toolHandlers.set(aiQaStreamHandler.name, aiQaStreamHandler);
41
- logger_1.logger.info('Tools registered', {
38
+ logger.info('Tools registered', {
42
39
  tools: Array.from(this.toolHandlers.keys()),
43
40
  });
44
41
  }
@@ -47,25 +44,40 @@ class LexiangMcpServer {
47
44
  */
48
45
  setupHandlers() {
49
46
  // 处理工具列表请求
50
- this.server.setRequestHandler(types_1.ListToolsRequestSchema, async () => {
47
+ this.server.setRequestHandler(ListToolsRequestSchema, async () => {
51
48
  const tools = Array.from(this.toolHandlers.values()).map((handler) => ({
52
49
  name: handler.name,
53
50
  description: handler.description,
54
51
  inputSchema: handler.inputSchema,
55
52
  }));
56
- logger_1.logger.debug('List tools request', { count: tools.length });
53
+ logger.debug('List tools request', { count: tools.length });
57
54
  return { tools };
58
55
  });
59
56
  // 处理工具调用请求
60
- this.server.setRequestHandler(types_1.CallToolRequestSchema, async (request) => {
57
+ this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
61
58
  const { name, arguments: args } = request.params;
62
- logger_1.logger.info('Tool call request', { name });
59
+ logger.info('Tool call request', { name });
63
60
  const handler = this.toolHandlers.get(name);
64
61
  if (!handler) {
65
62
  throw new Error(`Tool not found: ${name}`);
66
63
  }
67
64
  try {
68
65
  const result = await handler.execute(args);
66
+ // 调试模式:如果结果看起来是空的,打印出来看看
67
+ if (!result || (typeof result === 'object' && Object.keys(result).length === 0)) {
68
+ return {
69
+ content: [
70
+ {
71
+ type: 'text',
72
+ text: JSON.stringify({
73
+ status: 'empty_result',
74
+ message: 'Tool executed but returned empty result',
75
+ raw_result: result
76
+ }, null, 2)
77
+ }
78
+ ]
79
+ };
80
+ }
69
81
  return {
70
82
  content: [
71
83
  {
@@ -76,9 +88,23 @@ class LexiangMcpServer {
76
88
  };
77
89
  }
78
90
  catch (error) {
79
- logger_1.logger.error('Tool execution failed', { name, error });
80
- const mcpError = (0, error_handler_1.handleError)(error);
81
- throw mcpError;
91
+ logger.error('Tool execution failed', { name, error });
92
+ // 关键修改:将错误详情直接返回给 Claude,方便用户调试
93
+ const errorInfo = {
94
+ status: 'error',
95
+ message: error.message || 'Unknown error',
96
+ stack: error.stack,
97
+ details: error.response?.data || error.meta || 'No details available'
98
+ };
99
+ return {
100
+ content: [
101
+ {
102
+ type: 'text',
103
+ text: JSON.stringify(errorInfo, null, 2)
104
+ }
105
+ ],
106
+ isError: true
107
+ };
82
108
  }
83
109
  });
84
110
  }
@@ -87,18 +113,18 @@ class LexiangMcpServer {
87
113
  */
88
114
  async start() {
89
115
  try {
90
- logger_1.logger.info('Starting MCP server...');
116
+ logger.info('Starting MCP server...');
91
117
  // 使用stdio传输
92
- const transport = new stdio_1.StdioServerTransport();
118
+ const transport = new StdioServerTransport();
93
119
  await this.server.connect(transport);
94
- logger_1.logger.info('MCP server started successfully', {
120
+ logger.info('MCP server started successfully', {
95
121
  name: 'mcp-lexiang-search',
96
122
  version: '1.0.0',
97
123
  });
98
124
  }
99
125
  catch (error) {
100
- logger_1.logger.error('Failed to start MCP server', { error });
101
- throw (0, error_handler_1.handleError)(error);
126
+ logger.error('Failed to start MCP server', { error });
127
+ throw handleError(error);
102
128
  }
103
129
  }
104
130
  /**
@@ -106,15 +132,14 @@ class LexiangMcpServer {
106
132
  */
107
133
  async stop() {
108
134
  try {
109
- logger_1.logger.info('Stopping MCP server...');
135
+ logger.info('Stopping MCP server...');
110
136
  await this.server.close();
111
- logger_1.logger.info('MCP server stopped');
137
+ logger.info('MCP server stopped');
112
138
  }
113
139
  catch (error) {
114
- logger_1.logger.error('Failed to stop MCP server', { error });
115
- throw (0, error_handler_1.handleError)(error);
140
+ logger.error('Failed to stop MCP server', { error });
141
+ throw handleError(error);
116
142
  }
117
143
  }
118
144
  }
119
- exports.LexiangMcpServer = LexiangMcpServer;
120
145
  //# sourceMappingURL=server.js.map
@@ -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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"}
@@ -1,20 +1,29 @@
1
1
  /**
2
2
  * AI问答业务服务
3
3
  */
4
- import { AiQaRequestDto } from '../dto/ai-qa-request.dto';
5
- import { toMcpResponse } from '../dto/ai-qa-response.dto';
4
+ import { AiQaRequestDto } from '../dto/ai-qa-request.dto.js';
5
+ import { toMcpResponse } from '../dto/ai-qa-response.dto.js';
6
+ import { StreamChunk } from '../types/lexiang-api.types.js';
6
7
  /**
7
8
  * AI问答服务
8
9
  */
9
10
  export declare class AiQaService {
10
11
  private apiClient;
11
12
  constructor();
13
+ /**
14
+ * 获取App Key和Secret
15
+ */
16
+ private getCredentials;
12
17
  /**
13
18
  * 执行非流式AI问答
14
19
  */
15
20
  executeNonStream(requestDto: AiQaRequestDto): Promise<ReturnType<typeof toMcpResponse>>;
16
21
  /**
17
- * 执行流式AI问答
22
+ * 执行流式AI问答 (Generator模式)
23
+ */
24
+ executeStreamGenerator(requestDto: AiQaRequestDto): AsyncGenerator<StreamChunk, void, unknown>;
25
+ /**
26
+ * @deprecated 使用 executeStreamGenerator 代替
18
27
  */
19
28
  executeStream(requestDto: AiQaRequestDto, onChunk: (delta_content: string, content: string, is_stop: boolean) => void, onComplete: (session_id: string) => void, onError: (error: Error) => void): Promise<void>;
20
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ai-qa.service.d.ts","sourceRoot":"","sources":["../../src/services/ai-qa.service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAI1D;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAmB;;IAMpC;;OAEG;IACG,gBAAgB,CAAC,UAAU,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;IAwB7F;;OAEG;IACG,aAAa,CACjB,UAAU,EAAE,cAAc,EAC1B,OAAO,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,EAC3E,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,EACxC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAC9B,OAAO,CAAC,IAAI,CAAC;CAgDjB"}
1
+ {"version":3,"file":"ai-qa.service.d.ts","sourceRoot":"","sources":["../../src/services/ai-qa.service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAG7D,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAG5D;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAmB;;IAMpC;;OAEG;IACH,OAAO,CAAC,cAAc;IAWtB;;OAEG;IACG,gBAAgB,CAAC,UAAU,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;IAqC7F;;OAEG;IACI,sBAAsB,CAAC,UAAU,EAAE,cAAc,GAAG,cAAc,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC;IAyBrG;;OAEG;IACG,aAAa,CACjB,UAAU,EAAE,cAAc,EAC1B,OAAO,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,EAC3E,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,EACxC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAC9B,OAAO,CAAC,IAAI,CAAC;CAqBjB"}
@@ -1,81 +1,107 @@
1
- "use strict";
2
1
  /**
3
2
  * AI问答业务服务
4
3
  */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.AiQaService = void 0;
7
- const lexiang_api_service_1 = require("./lexiang-api.service");
8
- const ai_qa_response_dto_1 = require("../dto/ai-qa-response.dto");
9
- const api_constants_1 = require("../constants/api.constants");
10
- const logger_1 = require("../utils/logger");
4
+ import { LexiangApiClient } from './lexiang-api.service.js';
5
+ import { toMcpResponse } from '../dto/ai-qa-response.dto.js';
6
+ import { ANONYMOUS_STAFF_ID } from '../constants/api.constants.js';
7
+ import { logger } from '../utils/logger.js';
8
+ import { BaseError, ApiError } from '../utils/error-handler.js';
11
9
  /**
12
10
  * AI问答服务
13
11
  */
14
- class AiQaService {
12
+ export class AiQaService {
15
13
  apiClient;
16
14
  constructor() {
17
- this.apiClient = new lexiang_api_service_1.LexiangApiClient();
15
+ this.apiClient = new LexiangApiClient();
16
+ }
17
+ /**
18
+ * 获取App Key和Secret
19
+ */
20
+ getCredentials(dto) {
21
+ const appKey = dto.app_key || process.env.LEXIANG_APP_KEY;
22
+ const appSecret = dto.app_secret || process.env.LEXIANG_APP_SECRET;
23
+ if (!appKey || !appSecret) {
24
+ throw new BaseError('Missing credentials: LEXIANG_APP_KEY or LEXIANG_APP_SECRET must be provided in environment variables or request parameters');
25
+ }
26
+ return { appKey, appSecret };
18
27
  }
19
28
  /**
20
29
  * 执行非流式AI问答
21
30
  */
22
31
  async executeNonStream(requestDto) {
23
32
  try {
24
- logger_1.logger.info('Executing non-stream AI QA', { query: requestDto.query });
33
+ logger.info('Executing non-stream AI QA', { query: requestDto.query });
34
+ const { appKey, appSecret } = this.getCredentials(requestDto);
25
35
  // 获取access token
26
- const accessToken = await this.apiClient.getAccessToken(requestDto.app_key, requestDto.app_secret);
36
+ const accessToken = await this.apiClient.getAccessToken(appKey, appSecret);
27
37
  // 构造请求
28
38
  const lexiangRequest = requestDto.toLexiangRequest();
29
39
  // 调用API
30
- const response = await this.apiClient.queryAiQa(accessToken, api_constants_1.ANONYMOUS_STAFF_ID, lexiangRequest);
40
+ const response = await this.apiClient.queryAiQa(accessToken, ANONYMOUS_STAFF_ID, lexiangRequest);
41
+ // 打印原始响应以便调试
42
+ logger.debug('Raw API Response', { response });
43
+ // 检查业务错误码
44
+ if (response.code !== 0) {
45
+ throw new ApiError(`Lexiang API Error: ${response.message}`, {
46
+ code: response.code,
47
+ request_id: response.request_id
48
+ });
49
+ }
31
50
  // 转换响应
32
- const mcpResponse = (0, ai_qa_response_dto_1.toMcpResponse)(response.data);
33
- logger_1.logger.info('Non-stream AI QA completed', { session_id: response.data.session_id });
51
+ const mcpResponse = toMcpResponse(response.data);
52
+ logger.info('Non-stream AI QA completed', { session_id: response.data.session_id });
34
53
  return mcpResponse;
35
54
  }
36
55
  catch (error) {
37
- logger_1.logger.error('Non-stream AI QA failed', { query: requestDto.query, error });
56
+ logger.error('Non-stream AI QA failed', { query: requestDto.query, error });
38
57
  throw error;
39
58
  }
40
59
  }
41
60
  /**
42
- * 执行流式AI问答
61
+ * 执行流式AI问答 (Generator模式)
43
62
  */
44
- async executeStream(requestDto, onChunk, onComplete, onError) {
63
+ async *executeStreamGenerator(requestDto) {
45
64
  try {
46
- logger_1.logger.info('Executing stream AI QA', { query: requestDto.query });
65
+ logger.info('Executing stream AI QA', { query: requestDto.query });
66
+ const { appKey, appSecret } = this.getCredentials(requestDto);
47
67
  // 获取access token
48
- const accessToken = await this.apiClient.getAccessToken(requestDto.app_key, requestDto.app_secret);
68
+ const accessToken = await this.apiClient.getAccessToken(appKey, appSecret);
49
69
  // 构造请求
50
70
  const lexiangRequest = requestDto.toLexiangRequest();
51
- // 用于存储完整内容
52
- let fullContent = '';
53
- let sessionId = '';
54
71
  // 调用流式API
55
- await this.apiClient.streamAiQa(accessToken, api_constants_1.ANONYMOUS_STAFF_ID, lexiangRequest, (chunk) => {
56
- // 处理流式数据块
72
+ const generator = this.apiClient.streamAiQaGenerator(accessToken, ANONYMOUS_STAFF_ID, lexiangRequest);
73
+ for await (const chunk of generator) {
74
+ yield chunk;
75
+ }
76
+ }
77
+ catch (error) {
78
+ logger.error('Stream AI QA failed', { query: requestDto.query, error });
79
+ throw error;
80
+ }
81
+ }
82
+ /**
83
+ * @deprecated 使用 executeStreamGenerator 代替
84
+ */
85
+ async executeStream(requestDto, onChunk, onComplete, onError) {
86
+ try {
87
+ let sessionId = '';
88
+ const generator = this.executeStreamGenerator(requestDto);
89
+ for await (const chunk of generator) {
57
90
  if (chunk.session_id && !sessionId) {
58
91
  sessionId = chunk.session_id;
59
92
  }
60
93
  if (chunk.delta_content) {
61
- fullContent += chunk.delta_content;
62
94
  onChunk(chunk.delta_content, chunk.content, chunk.is_stop);
63
95
  }
64
- if (chunk.content) {
65
- fullContent = chunk.content;
66
- }
67
96
  if (chunk.is_stop) {
68
- logger_1.logger.info('Stream AI QA completed', { session_id: sessionId });
97
+ logger.info('Stream AI QA completed', { session_id: sessionId });
69
98
  }
70
- }, () => {
71
- onComplete(sessionId);
72
- }, onError);
99
+ }
100
+ onComplete(sessionId);
73
101
  }
74
102
  catch (error) {
75
- logger_1.logger.error('Stream AI QA failed', { query: requestDto.query, error });
76
103
  onError(error);
77
104
  }
78
105
  }
79
106
  }
80
- exports.AiQaService = AiQaService;
81
107
  //# sourceMappingURL=ai-qa.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-qa.service.js","sourceRoot":"","sources":["../../src/services/ai-qa.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai-qa.service.js","sourceRoot":"","sources":["../../src/services/ai-qa.service.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * 乐享API客户端服务
3
3
  */
4
- import { AiQaRequest, AiQaResponse, StreamChunk } from '../types/lexiang-api.types';
4
+ import { AiQaRequest, AiQaResponse, StreamChunk } from '../types/lexiang-api.types.js';
5
5
  /**
6
6
  * 乐享API客户端
7
7
  */
@@ -34,7 +34,11 @@ export declare class LexiangApiClient {
34
34
  */
35
35
  queryAiQa(accessToken: string, staffId: string, request: AiQaRequest): Promise<AiQaResponse>;
36
36
  /**
37
- * 流式AI问答
37
+ * 流式AI问答 (Generator模式)
38
+ */
39
+ streamAiQaGenerator(accessToken: string, staffId: string, request: AiQaRequest): AsyncGenerator<StreamChunk, void, unknown>;
40
+ /**
41
+ * @deprecated 使用 streamAiQaGenerator 代替
38
42
  */
39
43
  streamAiQa(accessToken: string, staffId: string, request: AiQaRequest, onChunk: (chunk: StreamChunk) => void, onComplete: () => void, onError: (error: Error) => void): Promise<void>;
40
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"lexiang-api.service.d.ts","sourceRoot":"","sources":["../../src/services/lexiang-api.service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,OAAO,EAEL,WAAW,EACX,YAAY,EACZ,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAWpC;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,UAAU,CAA0C;;IAsB5D;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoBxB;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAoCxE;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAMrC;;OAEG;IACG,SAAS,CACb,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,YAAY,CAAC;IA2BxB;;OAEG;IACG,UAAU,CACd,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,EACrC,UAAU,EAAE,MAAM,IAAI,EACtB,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAC9B,OAAO,CAAC,IAAI,CAAC;CAqDjB"}
1
+ {"version":3,"file":"lexiang-api.service.d.ts","sourceRoot":"","sources":["../../src/services/lexiang-api.service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,OAAO,EAEL,WAAW,EACX,YAAY,EACZ,WAAW,EACZ,MAAM,+BAA+B,CAAC;AAWvC;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,UAAU,CAA0C;;IAsB5D;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoBxB;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqCxE;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAMrC;;OAEG;IACG,SAAS,CACb,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,YAAY,CAAC;IA2BxB;;OAEG;IACI,mBAAmB,CACxB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,WAAW,GACnB,cAAc,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC;IAkE7C;;OAEG;IACG,UAAU,CACd,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,EACrC,UAAU,EAAE,MAAM,IAAI,EACtB,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAC9B,OAAO,CAAC,IAAI,CAAC;CAWjB"}