@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.
- package/README.md +108 -40
- package/build/config.d.ts +9 -0
- package/build/config.d.ts.map +1 -0
- package/build/config.js +32 -0
- package/build/config.js.map +1 -0
- package/build/format.d.ts +6 -0
- package/build/format.d.ts.map +1 -0
- package/build/format.js +23 -0
- package/build/format.js.map +1 -0
- package/build/http-server.d.ts +15 -0
- package/build/http-server.d.ts.map +1 -0
- package/build/http-server.js +131 -0
- package/build/http-server.js.map +1 -0
- package/build/index.js +184 -69
- package/build/index.js.map +1 -1
- package/build/prompts.d.ts +23 -0
- package/build/prompts.d.ts.map +1 -0
- package/build/prompts.js +112 -0
- package/build/prompts.js.map +1 -0
- package/build/resources.d.ts +31 -0
- package/build/resources.d.ts.map +1 -0
- package/build/resources.js +66 -0
- package/build/resources.js.map +1 -0
- package/build/services/advanced-features.d.ts +19 -9
- package/build/services/advanced-features.d.ts.map +1 -1
- package/build/services/advanced-features.js +266 -191
- package/build/services/advanced-features.js.map +1 -1
- package/build/services/boot-wiki.d.ts +25 -0
- package/build/services/boot-wiki.d.ts.map +1 -0
- package/build/services/boot-wiki.js +103 -0
- package/build/services/boot-wiki.js.map +1 -0
- package/build/services/cache.d.ts +18 -3
- package/build/services/cache.d.ts.map +1 -1
- package/build/services/cache.js +84 -3
- package/build/services/cache.js.map +1 -1
- package/build/services/dependency-finder.d.ts +46 -0
- package/build/services/dependency-finder.d.ts.map +1 -0
- package/build/services/dependency-finder.js +181 -0
- package/build/services/dependency-finder.js.map +1 -0
- package/build/services/diagnosis.d.ts +46 -0
- package/build/services/diagnosis.d.ts.map +1 -0
- package/build/services/diagnosis.js +481 -0
- package/build/services/diagnosis.js.map +1 -0
- package/build/services/guides-list.d.ts +16 -0
- package/build/services/guides-list.d.ts.map +1 -0
- package/build/services/guides-list.js +45 -0
- package/build/services/guides-list.js.map +1 -0
- package/build/services/http.d.ts +21 -0
- package/build/services/http.d.ts.map +1 -0
- package/build/services/http.js +168 -0
- package/build/services/http.js.map +1 -0
- package/build/services/initializr.d.ts +41 -0
- package/build/services/initializr.d.ts.map +1 -0
- package/build/services/initializr.js +135 -0
- package/build/services/initializr.js.map +1 -0
- package/build/services/markdown.d.ts +56 -0
- package/build/services/markdown.d.ts.map +1 -0
- package/build/services/markdown.js +146 -0
- package/build/services/markdown.js.map +1 -0
- package/build/services/migration-sources.d.ts +13 -0
- package/build/services/migration-sources.d.ts.map +1 -0
- package/build/services/migration-sources.js +48 -0
- package/build/services/migration-sources.js.map +1 -0
- package/build/services/release-notes.d.ts +23 -0
- package/build/services/release-notes.d.ts.map +1 -0
- package/build/services/release-notes.js +94 -0
- package/build/services/release-notes.js.map +1 -0
- package/build/services/search-index.d.ts +33 -0
- package/build/services/search-index.d.ts.map +1 -0
- package/build/services/search-index.js +147 -0
- package/build/services/search-index.js.map +1 -0
- package/build/services/spring-projects-config.d.ts +98 -0
- package/build/services/spring-projects-config.d.ts.map +1 -0
- package/build/services/spring-projects-config.js +397 -0
- package/build/services/spring-projects-config.js.map +1 -0
- package/build/services/springboot-docs-optimized.d.ts +72 -21
- package/build/services/springboot-docs-optimized.d.ts.map +1 -1
- package/build/services/springboot-docs-optimized.js +354 -208
- package/build/services/springboot-docs-optimized.js.map +1 -1
- package/build/services/url.d.ts +15 -0
- package/build/services/url.d.ts.map +1 -0
- package/build/services/url.js +40 -0
- package/build/services/url.js.map +1 -0
- package/build/tools/index.d.ts +393 -2
- package/build/tools/index.d.ts.map +1 -1
- package/build/tools/index.js +188 -15
- package/build/tools/index.js.map +1 -1
- package/build/validation.d.ts +7 -0
- package/build/validation.d.ts.map +1 -0
- package/build/validation.js +50 -0
- package/build/validation.js.map +1 -0
- package/build/version.d.ts +3 -0
- package/build/version.d.ts.map +1 -0
- package/build/version.js +6 -0
- package/build/version.js.map +1 -0
- package/package.json +9 -7
- package/build/debug.d.ts +0 -3
- package/build/debug.d.ts.map +0 -1
- package/build/debug.js +0 -292
- package/build/debug.js.map +0 -1
- package/build/services/advanced-features-old.d.ts +0 -45
- package/build/services/advanced-features-old.d.ts.map +0 -1
- package/build/services/advanced-features-old.js +0 -792
- package/build/services/advanced-features-old.js.map +0 -1
- package/build/services/springboot-docs-optimized-old.d.ts +0 -55
- package/build/services/springboot-docs-optimized-old.d.ts.map +0 -1
- package/build/services/springboot-docs-optimized-old.js +0 -588
- package/build/services/springboot-docs-optimized-old.js.map +0 -1
- package/build/services/springboot-docs.d.ts +0 -65
- package/build/services/springboot-docs.d.ts.map +0 -1
- package/build/services/springboot-docs.js +0 -708
- 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
|
|
11
|
-
|
|
12
|
-
private readonly MAX_RETRIES;
|
|
13
|
-
constructor();
|
|
12
|
+
private projectsConfig;
|
|
13
|
+
constructor(cache?: CacheService, projectsConfig?: SpringProjectsConfig);
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
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
|
-
|
|
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
|
-
*
|
|
24
|
+
* Search across the entire Spring ecosystem using real APIs
|
|
20
25
|
*/
|
|
21
|
-
|
|
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":"
|
|
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"}
|