@enokdev/springdocs-mcp 1.2.7 → 1.4.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 (112) hide show
  1. package/README.md +108 -40
  2. package/build/config.d.ts +9 -0
  3. package/build/config.d.ts.map +1 -0
  4. package/build/config.js +32 -0
  5. package/build/config.js.map +1 -0
  6. package/build/format.d.ts +6 -0
  7. package/build/format.d.ts.map +1 -0
  8. package/build/format.js +23 -0
  9. package/build/format.js.map +1 -0
  10. package/build/http-server.d.ts +15 -0
  11. package/build/http-server.d.ts.map +1 -0
  12. package/build/http-server.js +131 -0
  13. package/build/http-server.js.map +1 -0
  14. package/build/index.js +184 -69
  15. package/build/index.js.map +1 -1
  16. package/build/prompts.d.ts +23 -0
  17. package/build/prompts.d.ts.map +1 -0
  18. package/build/prompts.js +112 -0
  19. package/build/prompts.js.map +1 -0
  20. package/build/resources.d.ts +31 -0
  21. package/build/resources.d.ts.map +1 -0
  22. package/build/resources.js +66 -0
  23. package/build/resources.js.map +1 -0
  24. package/build/services/advanced-features.d.ts +19 -9
  25. package/build/services/advanced-features.d.ts.map +1 -1
  26. package/build/services/advanced-features.js +266 -191
  27. package/build/services/advanced-features.js.map +1 -1
  28. package/build/services/boot-wiki.d.ts +25 -0
  29. package/build/services/boot-wiki.d.ts.map +1 -0
  30. package/build/services/boot-wiki.js +103 -0
  31. package/build/services/boot-wiki.js.map +1 -0
  32. package/build/services/cache.d.ts +18 -3
  33. package/build/services/cache.d.ts.map +1 -1
  34. package/build/services/cache.js +84 -3
  35. package/build/services/cache.js.map +1 -1
  36. package/build/services/dependency-finder.d.ts +46 -0
  37. package/build/services/dependency-finder.d.ts.map +1 -0
  38. package/build/services/dependency-finder.js +181 -0
  39. package/build/services/dependency-finder.js.map +1 -0
  40. package/build/services/diagnosis.d.ts +46 -0
  41. package/build/services/diagnosis.d.ts.map +1 -0
  42. package/build/services/diagnosis.js +481 -0
  43. package/build/services/diagnosis.js.map +1 -0
  44. package/build/services/guides-list.d.ts +16 -0
  45. package/build/services/guides-list.d.ts.map +1 -0
  46. package/build/services/guides-list.js +45 -0
  47. package/build/services/guides-list.js.map +1 -0
  48. package/build/services/http.d.ts +21 -0
  49. package/build/services/http.d.ts.map +1 -0
  50. package/build/services/http.js +168 -0
  51. package/build/services/http.js.map +1 -0
  52. package/build/services/initializr.d.ts +41 -0
  53. package/build/services/initializr.d.ts.map +1 -0
  54. package/build/services/initializr.js +135 -0
  55. package/build/services/initializr.js.map +1 -0
  56. package/build/services/markdown.d.ts +56 -0
  57. package/build/services/markdown.d.ts.map +1 -0
  58. package/build/services/markdown.js +146 -0
  59. package/build/services/markdown.js.map +1 -0
  60. package/build/services/migration-sources.d.ts +13 -0
  61. package/build/services/migration-sources.d.ts.map +1 -0
  62. package/build/services/migration-sources.js +48 -0
  63. package/build/services/migration-sources.js.map +1 -0
  64. package/build/services/release-notes.d.ts +23 -0
  65. package/build/services/release-notes.d.ts.map +1 -0
  66. package/build/services/release-notes.js +94 -0
  67. package/build/services/release-notes.js.map +1 -0
  68. package/build/services/search-index.d.ts +33 -0
  69. package/build/services/search-index.d.ts.map +1 -0
  70. package/build/services/search-index.js +147 -0
  71. package/build/services/search-index.js.map +1 -0
  72. package/build/services/spring-projects-config.d.ts +98 -0
  73. package/build/services/spring-projects-config.d.ts.map +1 -0
  74. package/build/services/spring-projects-config.js +397 -0
  75. package/build/services/spring-projects-config.js.map +1 -0
  76. package/build/services/springboot-docs-optimized.d.ts +72 -21
  77. package/build/services/springboot-docs-optimized.d.ts.map +1 -1
  78. package/build/services/springboot-docs-optimized.js +354 -208
  79. package/build/services/springboot-docs-optimized.js.map +1 -1
  80. package/build/services/url.d.ts +15 -0
  81. package/build/services/url.d.ts.map +1 -0
  82. package/build/services/url.js +40 -0
  83. package/build/services/url.js.map +1 -0
  84. package/build/tools/index.d.ts +393 -2
  85. package/build/tools/index.d.ts.map +1 -1
  86. package/build/tools/index.js +188 -15
  87. package/build/tools/index.js.map +1 -1
  88. package/build/validation.d.ts +7 -0
  89. package/build/validation.d.ts.map +1 -0
  90. package/build/validation.js +50 -0
  91. package/build/validation.js.map +1 -0
  92. package/build/version.d.ts +3 -0
  93. package/build/version.d.ts.map +1 -0
  94. package/build/version.js +6 -0
  95. package/build/version.js.map +1 -0
  96. package/package.json +9 -7
  97. package/build/debug.d.ts +0 -3
  98. package/build/debug.d.ts.map +0 -1
  99. package/build/debug.js +0 -292
  100. package/build/debug.js.map +0 -1
  101. package/build/services/advanced-features-old.d.ts +0 -45
  102. package/build/services/advanced-features-old.d.ts.map +0 -1
  103. package/build/services/advanced-features-old.js +0 -792
  104. package/build/services/advanced-features-old.js.map +0 -1
  105. package/build/services/springboot-docs-optimized-old.d.ts +0 -55
  106. package/build/services/springboot-docs-optimized-old.d.ts.map +0 -1
  107. package/build/services/springboot-docs-optimized-old.js +0 -588
  108. package/build/services/springboot-docs-optimized-old.js.map +0 -1
  109. package/build/services/springboot-docs.d.ts +0 -65
  110. package/build/services/springboot-docs.d.ts.map +0 -1
  111. package/build/services/springboot-docs.js +0 -708
  112. package/build/services/springboot-docs.js.map +0 -1
@@ -0,0 +1,66 @@
1
+ import { ErrorCode, McpError } from "@modelcontextprotocol/sdk/types.js";
2
+ import { springProjectsConfig } from "./services/spring-projects-config.js";
3
+ // MCP resources: the Spring documentation the server already fetches, served as complete markdown documents.
4
+ // Real API only: reads go through the same services, cache and URL checks as the tools.
5
+ const MIME_TYPE = "text/markdown";
6
+ const PROJECT_PATTERN = /^spring:\/\/project\/([a-z0-9][a-z0-9-]*)$/;
7
+ const GUIDE_PATTERN = /^spring:\/\/guide\/([A-Za-z0-9][A-Za-z0-9._-]*)$/;
8
+ const ACCEPTED_FORMS = "spring://project/<name> (e.g. spring://project/spring-boot) or spring://guide/<id> (e.g. spring://guide/rest-service)";
9
+ /** Strict parsing of the raw string: no URL normalization, so nothing but the two accepted forms gets through. */
10
+ export function parseResourceUri(uri) {
11
+ const project = PROJECT_PATTERN.exec(uri);
12
+ if (project)
13
+ return { kind: "project", id: project[1] };
14
+ const guide = GUIDE_PATTERN.exec(uri);
15
+ if (guide && !guide[1].includes(".."))
16
+ return { kind: "guide", id: guide[1] };
17
+ throw new McpError(ErrorCode.InvalidParams, `Invalid resource URI. Expected ${ACCEPTED_FORMS}`);
18
+ }
19
+ export class ResourcesService {
20
+ docs;
21
+ constructor(docs) {
22
+ this.docs = docs;
23
+ }
24
+ listResources() {
25
+ return springProjectsConfig.getAllProjects().map((project) => ({
26
+ uri: `spring://project/spring-${project.id}`,
27
+ name: project.displayName,
28
+ description: `${project.displayName} project page on spring.io`,
29
+ mimeType: MIME_TYPE,
30
+ }));
31
+ }
32
+ listTemplates() {
33
+ return [
34
+ {
35
+ uriTemplate: "spring://project/{name}",
36
+ name: "Spring project",
37
+ description: "Any project page of spring.io/projects, by slug (e.g. spring-boot)",
38
+ mimeType: MIME_TYPE,
39
+ },
40
+ {
41
+ uriTemplate: "spring://guide/{id}",
42
+ name: "Spring guide",
43
+ description: "A getting-started guide of spring.io/guides, by id (e.g. rest-service)",
44
+ mimeType: MIME_TYPE,
45
+ },
46
+ ];
47
+ }
48
+ async readResource(uri) {
49
+ const { kind, id } = parseResourceUri(uri);
50
+ try {
51
+ let text;
52
+ if (kind === "project") {
53
+ const { markdown, url } = await this.docs.getProjectMarkdown(id);
54
+ text = `# ${id}\n\n${markdown}\n\nSource: ${url}`;
55
+ }
56
+ else {
57
+ text = await this.docs.getGuide(id, "full");
58
+ }
59
+ return { contents: [{ uri, mimeType: MIME_TYPE, text }] };
60
+ }
61
+ catch (error) {
62
+ throw new McpError(ErrorCode.InternalError, error instanceof Error ? error.message : "Unable to read the resource");
63
+ }
64
+ }
65
+ }
66
+ //# sourceMappingURL=resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"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"}
@@ -1,24 +1,29 @@
1
+ import { CacheService } from './cache.js';
2
+ import { SpringProjectsConfig } from './spring-projects-config.js';
3
+ import { ReleaseFocus } from './release-notes.js';
1
4
  /**
2
5
  * Advanced features service for Spring documentation - uses ONLY real Spring documentation APIs
3
6
  * No mock data - everything is fetched from actual Spring documentation sources
4
7
  */
5
8
  export declare class AdvancedFeaturesService {
6
9
  private cache;
7
- private turndownService;
8
10
  private readonly baseUrl;
9
11
  private readonly springProjectsUrl;
10
- private readonly springGuideUrl;
11
- private readonly REQUEST_TIMEOUT;
12
- private readonly MAX_RETRIES;
13
- constructor();
12
+ private projectsConfig;
13
+ constructor(cache?: CacheService, projectsConfig?: SpringProjectsConfig);
14
14
  /**
15
- * Search across the entire Spring ecosystem using real APIs
15
+ * Get the GitHub release notes of a Spring project (a given version or the latest one),
16
+ * optionally filtered on breaking changes, new features or deprecations.
16
17
  */
17
- searchEcosystem(query: string, scope?: string, limit?: number): Promise<any>;
18
+ getReleaseNotes(project: string, version?: string, focus?: ReleaseFocus): Promise<string>;
19
+ /** Throws a clear error when GitHub refused the request because of its rate limit. */
20
+ private assertNotRateLimited;
21
+ /** Latest stable release of an "X.Y" minor, paginating the GitHub releases list. */
22
+ private findLatestOfMinor;
18
23
  /**
19
- * Extract content intelligently - same as in SpringBootDocsServiceOptimized
24
+ * Search across the entire Spring ecosystem using real APIs
20
25
  */
21
- private extractIntelligentContent;
26
+ searchEcosystem(query: string, scope?: string, limit?: number): Promise<any>;
22
27
  /**
23
28
  * Get tutorials by fetching from actual Spring Boot guides
24
29
  */
@@ -38,6 +43,11 @@ export declare class AdvancedFeaturesService {
38
43
  private searchProjects;
39
44
  private searchGuides;
40
45
  private searchDocumentation;
46
+ /**
47
+ * Search Spring AI documentation and resources
48
+ * Covers ChatClient, RAG, embeddings, vector stores, and LLM integrations
49
+ */
50
+ private searchSpringAI;
41
51
  private searchAPI;
42
52
  private formatEcosystemResults;
43
53
  private fetchWithRetry;
@@ -1 +1 @@
1
- {"version":3,"file":"advanced-features.d.ts","sourceRoot":"","sources":["../../src/services/advanced-features.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IACpD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAgC;IAClE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA8B;IAC7D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAK;;IAUjC;;OAEG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAc,EAAE,KAAK,GAAE,MAAU;IAyC7E;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAqDjC;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAmB,EAAE,WAAW,GAAE,MAAiB;IAyC3F;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,MAAc;IAqD/E;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,GAAE,MAAuB;IA4DjF;;OAEG;IACG,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;YAiDpE,cAAc;YAkCd,YAAY;YAmCZ,mBAAmB;YA+BnB,SAAS;IAkBvB,OAAO,CAAC,sBAAsB;YA+ChB,cAAc;CA0B7B"}
1
+ {"version":3,"file":"advanced-features.d.ts","sourceRoot":"","sources":["../../src/services/advanced-features.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAK1C,OAAO,EAAE,oBAAoB,EAAwB,MAAM,6BAA6B,CAAC;AAEzF,OAAO,EAAE,YAAY,EAAmF,MAAM,oBAAoB,CAAC;AAYnI;;;GAGG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IACpD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAgC;IAElE,OAAO,CAAC,cAAc,CAAuB;gBAG3C,KAAK,GAAE,YAAiC,EACxC,cAAc,GAAE,oBAA2C;IAM7D;;;OAGG;IACG,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,GAAE,YAAoB,GAAG,OAAO,CAAC,MAAM,CAAC;IA+EtG,sFAAsF;IACtF,OAAO,CAAC,oBAAoB;IAM5B,oFAAoF;YACtE,iBAAiB;IAuB/B;;OAEG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAc,EAAE,KAAK,GAAE,MAAU;IAuD7E;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAmB,EAAE,WAAW,GAAE,MAAiB;IAwC3F;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,MAAc;IA2E/E;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,GAAE,MAAuB;IA4DjF;;OAEG;IACG,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;YAOpE,cAAc;YAgCd,YAAY;YAiBZ,mBAAmB;IA+BjC;;;OAGG;YACW,cAAc;YAsDd,SAAS;IAmBvB,OAAO,CAAC,sBAAsB;IA4D9B,OAAO,CAAC,cAAc;CAGvB"}