obsidian-mcp-server 2.0.7 → 3.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.
- package/CLAUDE.md +364 -0
- package/Dockerfile +99 -0
- package/LICENSE +4 -6
- package/README.md +246 -206
- package/changelog/3.0.x/3.0.0.md +102 -0
- package/changelog/template.md +51 -0
- package/dist/config/server-config.d.ts +19 -0
- package/dist/config/server-config.d.ts.map +1 -0
- package/dist/config/server-config.js +55 -0
- package/dist/config/server-config.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -295
- package/dist/index.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/index.d.ts +8 -0
- package/dist/mcp-server/prompts/definitions/index.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/index.js +8 -0
- package/dist/mcp-server/prompts/definitions/index.js.map +1 -0
- package/dist/mcp-server/resources/definitions/index.d.ts +36 -0
- package/dist/mcp-server/resources/definitions/index.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/index.js +9 -0
- package/dist/mcp-server/resources/definitions/index.js.map +1 -0
- package/dist/mcp-server/resources/definitions/obsidian-status.resource.d.ts +23 -0
- package/dist/mcp-server/resources/definitions/obsidian-status.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/obsidian-status.resource.js +47 -0
- package/dist/mcp-server/resources/definitions/obsidian-status.resource.js.map +1 -0
- package/dist/mcp-server/resources/definitions/obsidian-tags.resource.d.ts +13 -0
- package/dist/mcp-server/resources/definitions/obsidian-tags.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/obsidian-tags.resource.js +30 -0
- package/dist/mcp-server/resources/definitions/obsidian-tags.resource.js.map +1 -0
- package/dist/mcp-server/resources/definitions/obsidian-vault-note.resource.d.ts +21 -0
- package/dist/mcp-server/resources/definitions/obsidian-vault-note.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/obsidian-vault-note.resource.js +38 -0
- package/dist/mcp-server/resources/definitions/obsidian-vault-note.resource.js.map +1 -0
- package/dist/mcp-server/tools/definitions/_shared/schemas.d.ts +45 -0
- package/dist/mcp-server/tools/definitions/_shared/schemas.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/_shared/schemas.js +66 -0
- package/dist/mcp-server/tools/definitions/_shared/schemas.js.map +1 -0
- package/dist/mcp-server/tools/definitions/_shared/suggest-paths.d.ts +51 -0
- package/dist/mcp-server/tools/definitions/_shared/suggest-paths.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/_shared/suggest-paths.js +120 -0
- package/dist/mcp-server/tools/definitions/_shared/suggest-paths.js.map +1 -0
- package/dist/mcp-server/tools/definitions/index.d.ts +531 -0
- package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/index.js +38 -0
- package/dist/mcp-server/tools/definitions/index.js.map +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.d.ts +42 -0
- package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.js +58 -0
- package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.d.ts +46 -0
- package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.js +66 -0
- package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-execute-command.tool.d.ts +19 -0
- package/dist/mcp-server/tools/definitions/obsidian-execute-command.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-execute-command.tool.js +43 -0
- package/dist/mcp-server/tools/definitions/obsidian-execute-command.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.d.ts +92 -0
- package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.js +245 -0
- package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-list-commands.tool.d.ts +13 -0
- package/dist/mcp-server/tools/definitions/obsidian-list-commands.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-list-commands.tool.js +38 -0
- package/dist/mcp-server/tools/definitions/obsidian-list-commands.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.d.ts +59 -0
- package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.js +273 -0
- package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-list-tags.tool.d.ts +13 -0
- package/dist/mcp-server/tools/definitions/obsidian-list-tags.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-list-tags.tool.js +38 -0
- package/dist/mcp-server/tools/definitions/obsidian-list-tags.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.d.ts +68 -0
- package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.js +178 -0
- package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.d.ts +77 -0
- package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.js +172 -0
- package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.d.ts +22 -0
- package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.js +88 -0
- package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.d.ts +81 -0
- package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.js +83 -0
- package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.d.ts +59 -0
- package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.js +167 -0
- package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.d.ts +76 -0
- package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.js +244 -0
- package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.d.ts +41 -0
- package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.js +76 -0
- package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.js.map +1 -0
- package/dist/services/obsidian/frontmatter-ops.d.ts +34 -0
- package/dist/services/obsidian/frontmatter-ops.d.ts.map +1 -0
- package/dist/services/obsidian/frontmatter-ops.js +230 -0
- package/dist/services/obsidian/frontmatter-ops.js.map +1 -0
- package/dist/services/obsidian/obsidian-service.d.ts +73 -0
- package/dist/services/obsidian/obsidian-service.d.ts.map +1 -0
- package/dist/services/obsidian/obsidian-service.js +399 -0
- package/dist/services/obsidian/obsidian-service.js.map +1 -0
- package/dist/services/obsidian/section-extractor.d.ts +13 -0
- package/dist/services/obsidian/section-extractor.d.ts.map +1 -0
- package/dist/services/obsidian/section-extractor.js +124 -0
- package/dist/services/obsidian/section-extractor.js.map +1 -0
- package/dist/services/obsidian/types.d.ts +91 -0
- package/dist/services/obsidian/types.d.ts.map +1 -0
- package/dist/services/obsidian/types.js +7 -0
- package/dist/services/obsidian/types.js.map +1 -0
- package/package.json +63 -69
- package/server.json +167 -0
- package/CHANGELOG.md +0 -124
- package/dist/config/index.d.ts +0 -41
- package/dist/config/index.js +0 -191
- package/dist/mcp-server/server.d.ts +0 -33
- package/dist/mcp-server/server.js +0 -211
- package/dist/mcp-server/tools/obsidianDeleteNoteTool/index.d.ts +0 -12
- package/dist/mcp-server/tools/obsidianDeleteNoteTool/index.js +0 -12
- package/dist/mcp-server/tools/obsidianDeleteNoteTool/logic.d.ts +0 -51
- package/dist/mcp-server/tools/obsidianDeleteNoteTool/logic.js +0 -168
- package/dist/mcp-server/tools/obsidianDeleteNoteTool/registration.d.ts +0 -19
- package/dist/mcp-server/tools/obsidianDeleteNoteTool/registration.js +0 -91
- package/dist/mcp-server/tools/obsidianGlobalSearchTool/index.d.ts +0 -12
- package/dist/mcp-server/tools/obsidianGlobalSearchTool/index.js +0 -12
- package/dist/mcp-server/tools/obsidianGlobalSearchTool/logic.d.ts +0 -77
- package/dist/mcp-server/tools/obsidianGlobalSearchTool/logic.js +0 -341
- package/dist/mcp-server/tools/obsidianGlobalSearchTool/registration.d.ts +0 -18
- package/dist/mcp-server/tools/obsidianGlobalSearchTool/registration.js +0 -69
- package/dist/mcp-server/tools/obsidianListNotesTool/index.d.ts +0 -12
- package/dist/mcp-server/tools/obsidianListNotesTool/index.js +0 -12
- package/dist/mcp-server/tools/obsidianListNotesTool/logic.d.ts +0 -68
- package/dist/mcp-server/tools/obsidianListNotesTool/logic.js +0 -215
- package/dist/mcp-server/tools/obsidianListNotesTool/registration.d.ts +0 -23
- package/dist/mcp-server/tools/obsidianListNotesTool/registration.js +0 -98
- package/dist/mcp-server/tools/obsidianManageFrontmatterTool/index.d.ts +0 -3
- package/dist/mcp-server/tools/obsidianManageFrontmatterTool/index.js +0 -2
- package/dist/mcp-server/tools/obsidianManageFrontmatterTool/logic.d.ts +0 -42
- package/dist/mcp-server/tools/obsidianManageFrontmatterTool/logic.js +0 -152
- package/dist/mcp-server/tools/obsidianManageFrontmatterTool/registration.d.ts +0 -3
- package/dist/mcp-server/tools/obsidianManageFrontmatterTool/registration.js +0 -52
- package/dist/mcp-server/tools/obsidianManageTagsTool/index.d.ts +0 -3
- package/dist/mcp-server/tools/obsidianManageTagsTool/index.js +0 -2
- package/dist/mcp-server/tools/obsidianManageTagsTool/logic.d.ts +0 -28
- package/dist/mcp-server/tools/obsidianManageTagsTool/logic.js +0 -161
- package/dist/mcp-server/tools/obsidianManageTagsTool/registration.d.ts +0 -3
- package/dist/mcp-server/tools/obsidianManageTagsTool/registration.js +0 -52
- package/dist/mcp-server/tools/obsidianReadNoteTool/index.d.ts +0 -12
- package/dist/mcp-server/tools/obsidianReadNoteTool/index.js +0 -12
- package/dist/mcp-server/tools/obsidianReadNoteTool/logic.d.ts +0 -87
- package/dist/mcp-server/tools/obsidianReadNoteTool/logic.js +0 -216
- package/dist/mcp-server/tools/obsidianReadNoteTool/registration.d.ts +0 -20
- package/dist/mcp-server/tools/obsidianReadNoteTool/registration.js +0 -101
- package/dist/mcp-server/tools/obsidianSearchReplaceTool/index.d.ts +0 -12
- package/dist/mcp-server/tools/obsidianSearchReplaceTool/index.js +0 -12
- package/dist/mcp-server/tools/obsidianSearchReplaceTool/logic.d.ts +0 -255
- package/dist/mcp-server/tools/obsidianSearchReplaceTool/logic.js +0 -583
- package/dist/mcp-server/tools/obsidianSearchReplaceTool/registration.d.ts +0 -22
- package/dist/mcp-server/tools/obsidianSearchReplaceTool/registration.js +0 -111
- package/dist/mcp-server/tools/obsidianUpdateNoteTool/index.d.ts +0 -12
- package/dist/mcp-server/tools/obsidianUpdateNoteTool/index.js +0 -12
- package/dist/mcp-server/tools/obsidianUpdateNoteTool/logic.d.ts +0 -183
- package/dist/mcp-server/tools/obsidianUpdateNoteTool/logic.js +0 -490
- package/dist/mcp-server/tools/obsidianUpdateNoteTool/registration.d.ts +0 -21
- package/dist/mcp-server/tools/obsidianUpdateNoteTool/registration.js +0 -108
- package/dist/mcp-server/transports/auth/core/authContext.d.ts +0 -33
- package/dist/mcp-server/transports/auth/core/authContext.js +0 -24
- package/dist/mcp-server/transports/auth/core/authTypes.d.ts +0 -17
- package/dist/mcp-server/transports/auth/core/authTypes.js +0 -5
- package/dist/mcp-server/transports/auth/core/authUtils.d.ts +0 -18
- package/dist/mcp-server/transports/auth/core/authUtils.js +0 -45
- package/dist/mcp-server/transports/auth/index.d.ts +0 -10
- package/dist/mcp-server/transports/auth/index.js +0 -9
- package/dist/mcp-server/transports/auth/strategies/jwt/jwtMiddleware.d.ts +0 -27
- package/dist/mcp-server/transports/auth/strategies/jwt/jwtMiddleware.js +0 -149
- package/dist/mcp-server/transports/auth/strategies/oauth/oauthMiddleware.d.ts +0 -20
- package/dist/mcp-server/transports/auth/strategies/oauth/oauthMiddleware.js +0 -124
- package/dist/mcp-server/transports/httpErrorHandler.d.ts +0 -26
- package/dist/mcp-server/transports/httpErrorHandler.js +0 -73
- package/dist/mcp-server/transports/httpTransport.d.ts +0 -21
- package/dist/mcp-server/transports/httpTransport.js +0 -208
- package/dist/mcp-server/transports/stdioTransport.d.ts +0 -42
- package/dist/mcp-server/transports/stdioTransport.js +0 -63
- package/dist/services/obsidianRestAPI/index.d.ts +0 -15
- package/dist/services/obsidianRestAPI/index.js +0 -17
- package/dist/services/obsidianRestAPI/methods/activeFileMethods.d.ts +0 -38
- package/dist/services/obsidianRestAPI/methods/activeFileMethods.js +0 -62
- package/dist/services/obsidianRestAPI/methods/commandMethods.d.ts +0 -22
- package/dist/services/obsidianRestAPI/methods/commandMethods.js +0 -31
- package/dist/services/obsidianRestAPI/methods/openMethods.d.ts +0 -16
- package/dist/services/obsidianRestAPI/methods/openMethods.js +0 -21
- package/dist/services/obsidianRestAPI/methods/patchMethods.d.ts +0 -37
- package/dist/services/obsidianRestAPI/methods/patchMethods.js +0 -94
- package/dist/services/obsidianRestAPI/methods/periodicNoteMethods.d.ts +0 -42
- package/dist/services/obsidianRestAPI/methods/periodicNoteMethods.js +0 -66
- package/dist/services/obsidianRestAPI/methods/searchMethods.d.ts +0 -25
- package/dist/services/obsidianRestAPI/methods/searchMethods.js +0 -36
- package/dist/services/obsidianRestAPI/methods/vaultMethods.d.ts +0 -58
- package/dist/services/obsidianRestAPI/methods/vaultMethods.js +0 -144
- package/dist/services/obsidianRestAPI/service.d.ts +0 -195
- package/dist/services/obsidianRestAPI/service.js +0 -379
- package/dist/services/obsidianRestAPI/types.d.ts +0 -127
- package/dist/services/obsidianRestAPI/types.js +0 -7
- package/dist/services/obsidianRestAPI/vaultCache/index.d.ts +0 -4
- package/dist/services/obsidianRestAPI/vaultCache/index.js +0 -4
- package/dist/services/obsidianRestAPI/vaultCache/service.d.ts +0 -88
- package/dist/services/obsidianRestAPI/vaultCache/service.js +0 -299
- package/dist/types-global/errors.d.ts +0 -73
- package/dist/types-global/errors.js +0 -71
- package/dist/utils/index.d.ts +0 -5
- package/dist/utils/index.js +0 -13
- package/dist/utils/internal/asyncUtils.d.ts +0 -54
- package/dist/utils/internal/asyncUtils.js +0 -101
- package/dist/utils/internal/errorHandler.d.ts +0 -176
- package/dist/utils/internal/errorHandler.js +0 -351
- package/dist/utils/internal/index.d.ts +0 -4
- package/dist/utils/internal/index.js +0 -4
- package/dist/utils/internal/logger.d.ts +0 -141
- package/dist/utils/internal/logger.js +0 -406
- package/dist/utils/internal/requestContext.d.ts +0 -83
- package/dist/utils/internal/requestContext.js +0 -72
- package/dist/utils/metrics/index.d.ts +0 -1
- package/dist/utils/metrics/index.js +0 -1
- package/dist/utils/metrics/tokenCounter.d.ts +0 -27
- package/dist/utils/metrics/tokenCounter.js +0 -128
- package/dist/utils/obsidian/index.d.ts +0 -5
- package/dist/utils/obsidian/index.js +0 -5
- package/dist/utils/obsidian/obsidianApiUtils.d.ts +0 -14
- package/dist/utils/obsidian/obsidianApiUtils.js +0 -29
- package/dist/utils/obsidian/obsidianStatUtils.d.ts +0 -68
- package/dist/utils/obsidian/obsidianStatUtils.js +0 -143
- package/dist/utils/parsing/dateParser.d.ts +0 -56
- package/dist/utils/parsing/dateParser.js +0 -104
- package/dist/utils/parsing/index.d.ts +0 -2
- package/dist/utils/parsing/index.js +0 -3
- package/dist/utils/parsing/jsonParser.d.ts +0 -80
- package/dist/utils/parsing/jsonParser.js +0 -133
- package/dist/utils/security/idGenerator.d.ts +0 -140
- package/dist/utils/security/idGenerator.js +0 -194
- package/dist/utils/security/index.d.ts +0 -3
- package/dist/utils/security/index.js +0 -3
- package/dist/utils/security/rateLimiter.d.ts +0 -156
- package/dist/utils/security/rateLimiter.js +0 -235
- package/dist/utils/security/sanitization.d.ts +0 -244
- package/dist/utils/security/sanitization.js +0 -599
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Resource registration barrel for obsidian-mcp-server.
|
|
3
|
+
* @module mcp-server/resources/definitions/index
|
|
4
|
+
*/
|
|
5
|
+
export declare const allResourceDefinitions: (import("@cyanheads/mcp-ts-core").ResourceDefinition<import("zod").ZodObject<{}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
6
|
+
status: import("zod").ZodString;
|
|
7
|
+
service: import("zod").ZodString;
|
|
8
|
+
authenticated: import("zod").ZodBoolean;
|
|
9
|
+
versions: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
10
|
+
obsidian: import("zod").ZodOptional<import("zod").ZodString>;
|
|
11
|
+
self: import("zod").ZodOptional<import("zod").ZodString>;
|
|
12
|
+
}, import("zod/v4/core").$strip>>;
|
|
13
|
+
manifest: import("zod").ZodOptional<import("zod").ZodObject<{
|
|
14
|
+
id: import("zod").ZodString;
|
|
15
|
+
name: import("zod").ZodString;
|
|
16
|
+
version: import("zod").ZodString;
|
|
17
|
+
}, import("zod/v4/core").$strip>>;
|
|
18
|
+
}, import("zod/v4/core").$strip>, undefined> | import("@cyanheads/mcp-ts-core").ResourceDefinition<import("zod").ZodObject<{}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
19
|
+
tags: import("zod").ZodArray<import("zod").ZodObject<{
|
|
20
|
+
name: import("zod").ZodString;
|
|
21
|
+
count: import("zod").ZodNumber;
|
|
22
|
+
}, import("zod/v4/core").$strip>>;
|
|
23
|
+
}, import("zod/v4/core").$strip>, undefined> | import("@cyanheads/mcp-ts-core").ResourceDefinition<import("zod").ZodObject<{
|
|
24
|
+
path: import("zod").ZodString;
|
|
25
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
26
|
+
path: import("zod").ZodString;
|
|
27
|
+
content: import("zod").ZodString;
|
|
28
|
+
frontmatter: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>;
|
|
29
|
+
tags: import("zod").ZodArray<import("zod").ZodString>;
|
|
30
|
+
stat: import("zod").ZodObject<{
|
|
31
|
+
ctime: import("zod").ZodNumber;
|
|
32
|
+
mtime: import("zod").ZodNumber;
|
|
33
|
+
size: import("zod").ZodNumber;
|
|
34
|
+
}, import("zod/v4/core").$strip>;
|
|
35
|
+
}, import("zod/v4/core").$strip>, undefined>)[];
|
|
36
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+CAAoD,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Resource registration barrel for obsidian-mcp-server.
|
|
3
|
+
* @module mcp-server/resources/definitions/index
|
|
4
|
+
*/
|
|
5
|
+
import { obsidianStatus } from './obsidian-status.resource.js';
|
|
6
|
+
import { obsidianTags } from './obsidian-tags.resource.js';
|
|
7
|
+
import { obsidianVaultNote } from './obsidian-vault-note.resource.js';
|
|
8
|
+
export const allResourceDefinitions = [obsidianVaultNote, obsidianTags, obsidianStatus];
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,iBAAiB,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview obsidian://status — reachability + auth check for the Obsidian
|
|
3
|
+
* Local REST API plugin. Issues an anonymous probe (so the resource still
|
|
4
|
+
* works when the key is wrong) and a separate authenticated probe so the
|
|
5
|
+
* `authenticated` field reflects whether the configured key is accepted.
|
|
6
|
+
* @module mcp-server/resources/definitions/obsidian-status.resource
|
|
7
|
+
*/
|
|
8
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
9
|
+
export declare const obsidianStatus: import("@cyanheads/mcp-ts-core").ResourceDefinition<z.ZodObject<{}, z.core.$strip>, z.ZodObject<{
|
|
10
|
+
status: z.ZodString;
|
|
11
|
+
service: z.ZodString;
|
|
12
|
+
authenticated: z.ZodBoolean;
|
|
13
|
+
versions: z.ZodOptional<z.ZodObject<{
|
|
14
|
+
obsidian: z.ZodOptional<z.ZodString>;
|
|
15
|
+
self: z.ZodOptional<z.ZodString>;
|
|
16
|
+
}, z.core.$strip>>;
|
|
17
|
+
manifest: z.ZodOptional<z.ZodObject<{
|
|
18
|
+
id: z.ZodString;
|
|
19
|
+
name: z.ZodString;
|
|
20
|
+
version: z.ZodString;
|
|
21
|
+
}, z.core.$strip>>;
|
|
22
|
+
}, z.core.$strip>, undefined>;
|
|
23
|
+
//# sourceMappingURL=obsidian-status.resource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obsidian-status.resource.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/obsidian-status.resource.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAY,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAGrD,eAAO,MAAM,cAAc;;;;;;;;;;;;;6BAwCzB,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview obsidian://status — reachability + auth check for the Obsidian
|
|
3
|
+
* Local REST API plugin. Issues an anonymous probe (so the resource still
|
|
4
|
+
* works when the key is wrong) and a separate authenticated probe so the
|
|
5
|
+
* `authenticated` field reflects whether the configured key is accepted.
|
|
6
|
+
* @module mcp-server/resources/definitions/obsidian-status.resource
|
|
7
|
+
*/
|
|
8
|
+
import { resource, z } from '@cyanheads/mcp-ts-core';
|
|
9
|
+
import { getObsidianService } from '../../../services/obsidian/obsidian-service.js';
|
|
10
|
+
export const obsidianStatus = resource('obsidian://status', {
|
|
11
|
+
name: 'obsidian-status',
|
|
12
|
+
description: 'Server reachability, plugin version, and auth status of the Obsidian Local REST API. Reports the unauthenticated reachability info even when the API key is misconfigured; `authenticated` reflects whether the configured key is accepted by an authenticated probe.',
|
|
13
|
+
mimeType: 'application/json',
|
|
14
|
+
params: z.object({}),
|
|
15
|
+
output: z.object({
|
|
16
|
+
status: z.string().describe('Upstream reported status string.'),
|
|
17
|
+
service: z.string().describe('Service identifier returned by the plugin.'),
|
|
18
|
+
authenticated: z
|
|
19
|
+
.boolean()
|
|
20
|
+
.describe('True when the configured OBSIDIAN_API_KEY is accepted by an authenticated probe to /vault/.'),
|
|
21
|
+
versions: z
|
|
22
|
+
.object({
|
|
23
|
+
obsidian: z.string().optional().describe('Obsidian app version, when reported.'),
|
|
24
|
+
self: z.string().optional().describe('Local REST API plugin version, when reported.'),
|
|
25
|
+
})
|
|
26
|
+
.optional()
|
|
27
|
+
.describe('Version information from the plugin, when present.'),
|
|
28
|
+
manifest: z
|
|
29
|
+
.object({
|
|
30
|
+
id: z.string().describe('Plugin manifest ID.'),
|
|
31
|
+
name: z.string().describe('Plugin display name.'),
|
|
32
|
+
version: z.string().describe('Plugin version.'),
|
|
33
|
+
})
|
|
34
|
+
.optional()
|
|
35
|
+
.describe('Plugin manifest, when reported.'),
|
|
36
|
+
}),
|
|
37
|
+
auth: ['resource:obsidian-status:read'],
|
|
38
|
+
async handler(_params, ctx) {
|
|
39
|
+
const svc = getObsidianService();
|
|
40
|
+
const [status, authenticated] = await Promise.all([
|
|
41
|
+
svc.getStatus(ctx),
|
|
42
|
+
svc.probeAuthenticated(ctx),
|
|
43
|
+
]);
|
|
44
|
+
return { ...status, authenticated };
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
//# sourceMappingURL=obsidian-status.resource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obsidian-status.resource.js","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/obsidian-status.resource.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAE7E,MAAM,CAAC,MAAM,cAAc,GAAG,QAAQ,CAAC,mBAAmB,EAAE;IAC1D,IAAI,EAAE,iBAAiB;IACvB,WAAW,EACT,uQAAuQ;IACzQ,QAAQ,EAAE,kBAAkB;IAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACpB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QAC/D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;QAC1E,aAAa,EAAE,CAAC;aACb,OAAO,EAAE;aACT,QAAQ,CACP,6FAA6F,CAC9F;QACH,QAAQ,EAAE,CAAC;aACR,MAAM,CAAC;YACN,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;YAChF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;SACtF,CAAC;aACD,QAAQ,EAAE;aACV,QAAQ,CAAC,oDAAoD,CAAC;QACjE,QAAQ,EAAE,CAAC;aACR,MAAM,CAAC;YACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;YAC9C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YACjD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;SAChD,CAAC;aACD,QAAQ,EAAE;aACV,QAAQ,CAAC,iCAAiC,CAAC;KAC/C,CAAC;IACF,IAAI,EAAE,CAAC,+BAA+B,CAAC;IAEvC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG;QACxB,MAAM,GAAG,GAAG,kBAAkB,EAAE,CAAC;QACjC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAChD,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC;YAClB,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC;SAC5B,CAAC,CAAC;QACH,OAAO,EAAE,GAAG,MAAM,EAAE,aAAa,EAAE,CAAC;IACtC,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview obsidian://tags — vault tag listing with usage counts.
|
|
3
|
+
* Mirrors `obsidian_list_tags` for clients that prefer attaching resources.
|
|
4
|
+
* @module mcp-server/resources/definitions/obsidian-tags.resource
|
|
5
|
+
*/
|
|
6
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
7
|
+
export declare const obsidianTags: import("@cyanheads/mcp-ts-core").ResourceDefinition<z.ZodObject<{}, z.core.$strip>, z.ZodObject<{
|
|
8
|
+
tags: z.ZodArray<z.ZodObject<{
|
|
9
|
+
name: z.ZodString;
|
|
10
|
+
count: z.ZodNumber;
|
|
11
|
+
}, z.core.$strip>>;
|
|
12
|
+
}, z.core.$strip>, undefined>;
|
|
13
|
+
//# sourceMappingURL=obsidian-tags.resource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obsidian-tags.resource.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/obsidian-tags.resource.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAY,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAGrD,eAAO,MAAM,YAAY;;;;;6BAyBvB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview obsidian://tags — vault tag listing with usage counts.
|
|
3
|
+
* Mirrors `obsidian_list_tags` for clients that prefer attaching resources.
|
|
4
|
+
* @module mcp-server/resources/definitions/obsidian-tags.resource
|
|
5
|
+
*/
|
|
6
|
+
import { resource, z } from '@cyanheads/mcp-ts-core';
|
|
7
|
+
import { getObsidianService } from '../../../services/obsidian/obsidian-service.js';
|
|
8
|
+
export const obsidianTags = resource('obsidian://tags', {
|
|
9
|
+
name: 'obsidian-tags',
|
|
10
|
+
description: 'All tags found in the Obsidian vault, with usage counts. Includes hierarchical parents (e.g. `work` for `work/tasks`).',
|
|
11
|
+
mimeType: 'application/json',
|
|
12
|
+
params: z.object({}),
|
|
13
|
+
output: z.object({
|
|
14
|
+
tags: z
|
|
15
|
+
.array(z
|
|
16
|
+
.object({
|
|
17
|
+
name: z.string().describe('Tag name without the leading `#`.'),
|
|
18
|
+
count: z.number().describe('Usage count across the vault.'),
|
|
19
|
+
})
|
|
20
|
+
.describe('A tag with its usage count.'))
|
|
21
|
+
.describe('All tags in the vault.'),
|
|
22
|
+
}),
|
|
23
|
+
auth: ['resource:obsidian-tags:read'],
|
|
24
|
+
async handler(_params, ctx) {
|
|
25
|
+
const svc = getObsidianService();
|
|
26
|
+
const tags = await svc.listTags(ctx);
|
|
27
|
+
return { tags: tags.map((t) => ({ name: t.name, count: t.count })) };
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=obsidian-tags.resource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obsidian-tags.resource.js","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/obsidian-tags.resource.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAE7E,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC,iBAAiB,EAAE;IACtD,IAAI,EAAE,eAAe;IACrB,WAAW,EACT,wHAAwH;IAC1H,QAAQ,EAAE,kBAAkB;IAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACpB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,IAAI,EAAE,CAAC;aACJ,KAAK,CACJ,CAAC;aACE,MAAM,CAAC;YACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YAC9D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;SAC5D,CAAC;aACD,QAAQ,CAAC,6BAA6B,CAAC,CAC3C;aACA,QAAQ,CAAC,wBAAwB,CAAC;KACtC,CAAC;IACF,IAAI,EAAE,CAAC,6BAA6B,CAAC;IAErC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG;QACxB,MAAM,GAAG,GAAG,kBAAkB,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACrC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;IACvE,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview obsidian://vault/{+path} — note content as a stable, addressable
|
|
3
|
+
* URI. Mirrors `obsidian_get_note` with `format: "full"` for clients that
|
|
4
|
+
* support attaching resources to a conversation.
|
|
5
|
+
* @module mcp-server/resources/definitions/obsidian-vault-note.resource
|
|
6
|
+
*/
|
|
7
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
8
|
+
export declare const obsidianVaultNote: import("@cyanheads/mcp-ts-core").ResourceDefinition<z.ZodObject<{
|
|
9
|
+
path: z.ZodString;
|
|
10
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
11
|
+
path: z.ZodString;
|
|
12
|
+
content: z.ZodString;
|
|
13
|
+
frontmatter: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
14
|
+
tags: z.ZodArray<z.ZodString>;
|
|
15
|
+
stat: z.ZodObject<{
|
|
16
|
+
ctime: z.ZodNumber;
|
|
17
|
+
mtime: z.ZodNumber;
|
|
18
|
+
size: z.ZodNumber;
|
|
19
|
+
}, z.core.$strip>;
|
|
20
|
+
}, z.core.$strip>, undefined>;
|
|
21
|
+
//# sourceMappingURL=obsidian-vault-note.resource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obsidian-vault-note.resource.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/obsidian-vault-note.resource.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAY,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAGrD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;6BA8B5B,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview obsidian://vault/{+path} — note content as a stable, addressable
|
|
3
|
+
* URI. Mirrors `obsidian_get_note` with `format: "full"` for clients that
|
|
4
|
+
* support attaching resources to a conversation.
|
|
5
|
+
* @module mcp-server/resources/definitions/obsidian-vault-note.resource
|
|
6
|
+
*/
|
|
7
|
+
import { resource, z } from '@cyanheads/mcp-ts-core';
|
|
8
|
+
import { getObsidianService } from '../../../services/obsidian/obsidian-service.js';
|
|
9
|
+
export const obsidianVaultNote = resource('obsidian://vault/{+path}', {
|
|
10
|
+
name: 'obsidian-vault-note',
|
|
11
|
+
description: 'A note in the Obsidian vault. Returns the parsed NoteJson — content, frontmatter, tags, and stat — so clients can attach a specific note to a conversation.',
|
|
12
|
+
mimeType: 'application/json',
|
|
13
|
+
params: z.object({
|
|
14
|
+
path: z.string().min(1).describe('Vault-relative path of the note, including extension.'),
|
|
15
|
+
}),
|
|
16
|
+
output: z.object({
|
|
17
|
+
path: z.string().describe('Vault-relative path of the note.'),
|
|
18
|
+
content: z.string().describe('Raw markdown body.'),
|
|
19
|
+
frontmatter: z
|
|
20
|
+
.record(z.string(), z.unknown())
|
|
21
|
+
.describe('Parsed YAML frontmatter as an object.'),
|
|
22
|
+
tags: z.array(z.string()).describe('Tags from frontmatter and inline #tag syntax.'),
|
|
23
|
+
stat: z
|
|
24
|
+
.object({
|
|
25
|
+
ctime: z.number().describe('Created time, ms since epoch.'),
|
|
26
|
+
mtime: z.number().describe('Modified time, ms since epoch.'),
|
|
27
|
+
size: z.number().describe('File size in bytes.'),
|
|
28
|
+
})
|
|
29
|
+
.describe('File metadata.'),
|
|
30
|
+
}),
|
|
31
|
+
auth: ['resource:obsidian-vault-note:read'],
|
|
32
|
+
async handler(params, ctx) {
|
|
33
|
+
const svc = getObsidianService();
|
|
34
|
+
const note = await svc.getNoteJson(ctx, { type: 'path', path: params.path });
|
|
35
|
+
return note;
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=obsidian-vault-note.resource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obsidian-vault-note.resource.js","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/obsidian-vault-note.resource.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAE7E,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,0BAA0B,EAAE;IACpE,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EACT,6JAA6J;IAC/J,QAAQ,EAAE,kBAAkB;IAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uDAAuD,CAAC;KAC1F,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QAC7D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAClD,WAAW,EAAE,CAAC;aACX,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;aAC/B,QAAQ,CAAC,uCAAuC,CAAC;QACpD,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,+CAA+C,CAAC;QACnF,IAAI,EAAE,CAAC;aACJ,MAAM,CAAC;YACN,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;YAC3D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;YAC5D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;SACjD,CAAC;aACD,QAAQ,CAAC,gBAAgB,CAAC;KAC9B,CAAC;IACF,IAAI,EAAE,CAAC,mCAAmC,CAAC;IAE3C,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG;QACvB,MAAM,GAAG,GAAG,kBAAkB,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7E,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Reusable Zod shapes for Obsidian tool definitions.
|
|
3
|
+
* Target/Section/PatchOptions/ContentType are referenced across multiple tools;
|
|
4
|
+
* keeping them here prevents drift in the discriminator and field descriptions.
|
|
5
|
+
* @module mcp-server/tools/definitions/_shared/schemas
|
|
6
|
+
*/
|
|
7
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
8
|
+
/** Where a note lives — vault path, the active file, or a periodic note. */
|
|
9
|
+
export declare const TargetSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
10
|
+
type: z.ZodLiteral<"path">;
|
|
11
|
+
path: z.ZodString;
|
|
12
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
13
|
+
type: z.ZodLiteral<"active">;
|
|
14
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
15
|
+
type: z.ZodLiteral<"periodic">;
|
|
16
|
+
period: z.ZodEnum<{
|
|
17
|
+
daily: "daily";
|
|
18
|
+
weekly: "weekly";
|
|
19
|
+
monthly: "monthly";
|
|
20
|
+
quarterly: "quarterly";
|
|
21
|
+
yearly: "yearly";
|
|
22
|
+
}>;
|
|
23
|
+
date: z.ZodOptional<z.ZodString>;
|
|
24
|
+
}, z.core.$strip>], "type">;
|
|
25
|
+
/** Sub-document target inside a note. */
|
|
26
|
+
export declare const SectionSchema: z.ZodObject<{
|
|
27
|
+
type: z.ZodEnum<{
|
|
28
|
+
heading: "heading";
|
|
29
|
+
block: "block";
|
|
30
|
+
frontmatter: "frontmatter";
|
|
31
|
+
}>;
|
|
32
|
+
target: z.ZodString;
|
|
33
|
+
}, z.core.$strip>;
|
|
34
|
+
export declare const PatchOptionsSchema: z.ZodOptional<z.ZodObject<{
|
|
35
|
+
createTargetIfMissing: z.ZodDefault<z.ZodBoolean>;
|
|
36
|
+
applyIfContentPreexists: z.ZodDefault<z.ZodBoolean>;
|
|
37
|
+
trimTargetWhitespace: z.ZodDefault<z.ZodBoolean>;
|
|
38
|
+
}, z.core.$strip>>;
|
|
39
|
+
export declare const ContentTypeSchema: z.ZodDefault<z.ZodEnum<{
|
|
40
|
+
markdown: "markdown";
|
|
41
|
+
json: "json";
|
|
42
|
+
}>>;
|
|
43
|
+
export type ToolTarget = z.infer<typeof TargetSchema>;
|
|
44
|
+
export type ToolSection = z.infer<typeof SectionSchema>;
|
|
45
|
+
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../../../src/mcp-server/tools/definitions/_shared/schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAE3C,4EAA4E;AAC5E,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;2BA4BvB,CAAC;AAEH,yCAAyC;AACzC,eAAO,MAAM,aAAa;;;;;;;iBAQxB,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;kBAiBlB,CAAC;AAEd,eAAO,MAAM,iBAAiB;;;GAK3B,CAAC;AAEJ,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AACtD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Reusable Zod shapes for Obsidian tool definitions.
|
|
3
|
+
* Target/Section/PatchOptions/ContentType are referenced across multiple tools;
|
|
4
|
+
* keeping them here prevents drift in the discriminator and field descriptions.
|
|
5
|
+
* @module mcp-server/tools/definitions/_shared/schemas
|
|
6
|
+
*/
|
|
7
|
+
import { z } from '@cyanheads/mcp-ts-core';
|
|
8
|
+
/** Where a note lives — vault path, the active file, or a periodic note. */
|
|
9
|
+
export const TargetSchema = z.discriminatedUnion('type', [
|
|
10
|
+
z
|
|
11
|
+
.object({
|
|
12
|
+
type: z.literal('path').describe('Address by vault-relative path.'),
|
|
13
|
+
path: z
|
|
14
|
+
.string()
|
|
15
|
+
.min(1)
|
|
16
|
+
.describe('Vault-relative path including extension, e.g. "Projects/foo.md".'),
|
|
17
|
+
})
|
|
18
|
+
.describe('Address a note by its vault-relative path.'),
|
|
19
|
+
z
|
|
20
|
+
.object({
|
|
21
|
+
type: z.literal('active').describe('Address the file currently open in Obsidian.'),
|
|
22
|
+
})
|
|
23
|
+
.describe('Address whichever file is currently active in the Obsidian UI.'),
|
|
24
|
+
z
|
|
25
|
+
.object({
|
|
26
|
+
type: z.literal('periodic').describe('Address a daily/weekly/monthly/etc. periodic note.'),
|
|
27
|
+
period: z
|
|
28
|
+
.enum(['daily', 'weekly', 'monthly', 'quarterly', 'yearly'])
|
|
29
|
+
.describe('Periodic note granularity.'),
|
|
30
|
+
date: z
|
|
31
|
+
.string()
|
|
32
|
+
.regex(/^\d{4}-\d{2}-\d{2}$/)
|
|
33
|
+
.optional()
|
|
34
|
+
.describe('ISO date YYYY-MM-DD. Omit for the current period.'),
|
|
35
|
+
})
|
|
36
|
+
.describe('Address a periodic note (current or dated).'),
|
|
37
|
+
]);
|
|
38
|
+
/** Sub-document target inside a note. */
|
|
39
|
+
export const SectionSchema = z.object({
|
|
40
|
+
type: z.enum(['heading', 'block', 'frontmatter']).describe('Section locator kind.'),
|
|
41
|
+
target: z
|
|
42
|
+
.string()
|
|
43
|
+
.min(1)
|
|
44
|
+
.describe('Heading name (use "::" for nested headings), block reference (e.g. "2d9b4a"), or frontmatter field name.'),
|
|
45
|
+
});
|
|
46
|
+
export const PatchOptionsSchema = z
|
|
47
|
+
.object({
|
|
48
|
+
createTargetIfMissing: z
|
|
49
|
+
.boolean()
|
|
50
|
+
.default(false)
|
|
51
|
+
.describe('Create the target heading/block/frontmatter field if it does not exist.'),
|
|
52
|
+
applyIfContentPreexists: z
|
|
53
|
+
.boolean()
|
|
54
|
+
.default(false)
|
|
55
|
+
.describe('Apply the patch even if matching content already exists in the target. Guards against double-applying.'),
|
|
56
|
+
trimTargetWhitespace: z
|
|
57
|
+
.boolean()
|
|
58
|
+
.default(false)
|
|
59
|
+
.describe('Trim whitespace from the target section before applying the operation.'),
|
|
60
|
+
})
|
|
61
|
+
.optional();
|
|
62
|
+
export const ContentTypeSchema = z
|
|
63
|
+
.enum(['markdown', 'json'])
|
|
64
|
+
.default('markdown')
|
|
65
|
+
.describe('Content body format. Use "json" for typed frontmatter values or block-targeted table rows. JSON values must be valid JSON literals — strings need quoting (`"\\"draft\\""`, not `"draft"`), and numbers/booleans/arrays/objects pass through as-is.');
|
|
66
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../../../src/mcp-server/tools/definitions/_shared/schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAE3C,4EAA4E;AAC5E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IACvD,CAAC;SACE,MAAM,CAAC;QACN,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QACnE,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CAAC,kEAAkE,CAAC;KAChF,CAAC;SACD,QAAQ,CAAC,4CAA4C,CAAC;IACzD,CAAC;SACE,MAAM,CAAC;QACN,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,8CAA8C,CAAC;KACnF,CAAC;SACD,QAAQ,CAAC,gEAAgE,CAAC;IAC7E,CAAC;SACE,MAAM,CAAC;QACN,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,oDAAoD,CAAC;QAC1F,MAAM,EAAE,CAAC;aACN,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;aAC3D,QAAQ,CAAC,4BAA4B,CAAC;QACzC,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,KAAK,CAAC,qBAAqB,CAAC;aAC5B,QAAQ,EAAE;aACV,QAAQ,CAAC,mDAAmD,CAAC;KACjE,CAAC;SACD,QAAQ,CAAC,6CAA6C,CAAC;CAC3D,CAAC,CAAC;AAEH,yCAAyC;AACzC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACnF,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACP,0GAA0G,CAC3G;CACJ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,MAAM,CAAC;IACN,qBAAqB,EAAE,CAAC;SACrB,OAAO,EAAE;SACT,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,yEAAyE,CAAC;IACtF,uBAAuB,EAAE,CAAC;SACvB,OAAO,EAAE;SACT,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CACP,wGAAwG,CACzG;IACH,oBAAoB,EAAE,CAAC;SACpB,OAAO,EAAE;SACT,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,wEAAwE,CAAC;CACtF,CAAC;KACD,QAAQ,EAAE,CAAC;AAEd,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC;KAC/B,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;KAC1B,OAAO,CAAC,UAAU,CAAC;KACnB,QAAQ,CACP,qPAAqP,CACtP,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Vault path resolution helpers. Two layered behaviors:
|
|
3
|
+
*
|
|
4
|
+
* 1. **Case-insensitive fallback.** If a path lookup 404s, list the parent
|
|
5
|
+
* directory and look for a single case-insensitive filename match. If
|
|
6
|
+
* found, retry against the canonical filesystem path (matches v2.x
|
|
7
|
+
* behavior). This silently fixes "Readme.md" vs "README.md" on Linux; on
|
|
8
|
+
* Mac/Windows the OS already case-folds and the fallback is a no-op.
|
|
9
|
+
*
|
|
10
|
+
* 2. **"Did you mean" suggestions.** When no case match exists but the parent
|
|
11
|
+
* directory has near-matches (e.g., extension-stripped variants), re-throw
|
|
12
|
+
* NotFound enriched with the candidates in the message and
|
|
13
|
+
* `error.data.suggestions[]`.
|
|
14
|
+
*
|
|
15
|
+
* Read/open/delete tools wrap their service calls with `withCaseFallback`.
|
|
16
|
+
* @module mcp-server/tools/definitions/_shared/suggest-paths
|
|
17
|
+
*/
|
|
18
|
+
import type { Context } from '@cyanheads/mcp-ts-core';
|
|
19
|
+
import type { ObsidianService } from '../../../../services/obsidian/obsidian-service.js';
|
|
20
|
+
import type { NoteTarget } from '../../../../services/obsidian/types.js';
|
|
21
|
+
/**
|
|
22
|
+
* Wrap a service call with case-insensitive path fallback and "did you mean"
|
|
23
|
+
* enrichment. Non-path targets pass through — their paths are resolved
|
|
24
|
+
* upstream, so neither layer applies.
|
|
25
|
+
*
|
|
26
|
+
* For path targets:
|
|
27
|
+
* - **Exact match** → returns `{ result, resolvedPath: target.path }`.
|
|
28
|
+
* - **Single case match** → retries with the canonical path and returns
|
|
29
|
+
* `{ result, resolvedPath: <canonical> }`.
|
|
30
|
+
* - **Multiple case matches** → throws `Conflict` with the candidates so the
|
|
31
|
+
* agent can disambiguate.
|
|
32
|
+
* - **No case match, extension-stripped near-matches** → throws `NotFound`
|
|
33
|
+
* enriched with a "did you mean" hint and `suggestions[]`.
|
|
34
|
+
* - **No matches at all** → re-throws the original NotFound unchanged.
|
|
35
|
+
*
|
|
36
|
+
* `resolvedPath` is `undefined` for non-path targets — callers derive the
|
|
37
|
+
* canonical path from the result itself (typically `NoteJson.path`).
|
|
38
|
+
*/
|
|
39
|
+
export declare function withCaseFallback<T>(ctx: Context, svc: ObsidianService, target: NoteTarget, fn: (target: NoteTarget) => Promise<T>): Promise<{
|
|
40
|
+
result: T;
|
|
41
|
+
resolvedPath: string | undefined;
|
|
42
|
+
}>;
|
|
43
|
+
/**
|
|
44
|
+
* List the parent directory of `path` and return up to {@link MAX_SUGGESTIONS}
|
|
45
|
+
* close-match candidates. Match order: case-insensitive equality first, then
|
|
46
|
+
* extension-stripped equality. Returns `[]` on listing failure or empty
|
|
47
|
+
* basename. Used by callers that need suggestions without performing the
|
|
48
|
+
* underlying operation (e.g., `obsidian_open_in_ui`'s explicit messaging).
|
|
49
|
+
*/
|
|
50
|
+
export declare function findSimilarPaths(ctx: Context, svc: ObsidianService, path: string): Promise<string[]>;
|
|
51
|
+
//# sourceMappingURL=suggest-paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggest-paths.d.ts","sourceRoot":"","sources":["../../../../../src/mcp-server/tools/definitions/_shared/suggest-paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAW/D;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,UAAU,EAClB,EAAE,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,GACrC,OAAO,CAAC;IAAE,MAAM,EAAE,CAAC,CAAC;IAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC,CAkC1D;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,EAAE,CAAC,CAGnB"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Vault path resolution helpers. Two layered behaviors:
|
|
3
|
+
*
|
|
4
|
+
* 1. **Case-insensitive fallback.** If a path lookup 404s, list the parent
|
|
5
|
+
* directory and look for a single case-insensitive filename match. If
|
|
6
|
+
* found, retry against the canonical filesystem path (matches v2.x
|
|
7
|
+
* behavior). This silently fixes "Readme.md" vs "README.md" on Linux; on
|
|
8
|
+
* Mac/Windows the OS already case-folds and the fallback is a no-op.
|
|
9
|
+
*
|
|
10
|
+
* 2. **"Did you mean" suggestions.** When no case match exists but the parent
|
|
11
|
+
* directory has near-matches (e.g., extension-stripped variants), re-throw
|
|
12
|
+
* NotFound enriched with the candidates in the message and
|
|
13
|
+
* `error.data.suggestions[]`.
|
|
14
|
+
*
|
|
15
|
+
* Read/open/delete tools wrap their service calls with `withCaseFallback`.
|
|
16
|
+
* @module mcp-server/tools/definitions/_shared/suggest-paths
|
|
17
|
+
*/
|
|
18
|
+
import { conflict, JsonRpcErrorCode, McpError, notFound } from '@cyanheads/mcp-ts-core/errors';
|
|
19
|
+
const MAX_SUGGESTIONS = 5;
|
|
20
|
+
/**
|
|
21
|
+
* Wrap a service call with case-insensitive path fallback and "did you mean"
|
|
22
|
+
* enrichment. Non-path targets pass through — their paths are resolved
|
|
23
|
+
* upstream, so neither layer applies.
|
|
24
|
+
*
|
|
25
|
+
* For path targets:
|
|
26
|
+
* - **Exact match** → returns `{ result, resolvedPath: target.path }`.
|
|
27
|
+
* - **Single case match** → retries with the canonical path and returns
|
|
28
|
+
* `{ result, resolvedPath: <canonical> }`.
|
|
29
|
+
* - **Multiple case matches** → throws `Conflict` with the candidates so the
|
|
30
|
+
* agent can disambiguate.
|
|
31
|
+
* - **No case match, extension-stripped near-matches** → throws `NotFound`
|
|
32
|
+
* enriched with a "did you mean" hint and `suggestions[]`.
|
|
33
|
+
* - **No matches at all** → re-throws the original NotFound unchanged.
|
|
34
|
+
*
|
|
35
|
+
* `resolvedPath` is `undefined` for non-path targets — callers derive the
|
|
36
|
+
* canonical path from the result itself (typically `NoteJson.path`).
|
|
37
|
+
*/
|
|
38
|
+
export async function withCaseFallback(ctx, svc, target, fn) {
|
|
39
|
+
if (target.type !== 'path') {
|
|
40
|
+
return { result: await fn(target), resolvedPath: undefined };
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
return { result: await fn(target), resolvedPath: target.path };
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
if (!(err instanceof McpError) || err.code !== JsonRpcErrorCode.NotFound) {
|
|
47
|
+
throw err;
|
|
48
|
+
}
|
|
49
|
+
const probe = await probeParentDir(ctx, svc, target.path);
|
|
50
|
+
const sole = probe.caseMatches.length === 1 ? probe.caseMatches[0] : undefined;
|
|
51
|
+
if (sole !== undefined) {
|
|
52
|
+
const result = await fn({ type: 'path', path: sole });
|
|
53
|
+
return { result, resolvedPath: sole };
|
|
54
|
+
}
|
|
55
|
+
if (probe.caseMatches.length > 1) {
|
|
56
|
+
const list = probe.caseMatches.map((m) => `"${m}"`).join(', ');
|
|
57
|
+
throw conflict(`Ambiguous case-insensitive matches for '${target.path}': ${list}.`, { path: target.path, matches: probe.caseMatches }, { cause: err });
|
|
58
|
+
}
|
|
59
|
+
if (probe.extInsensitive.length === 0)
|
|
60
|
+
throw err;
|
|
61
|
+
const suggestions = probe.extInsensitive.slice(0, MAX_SUGGESTIONS);
|
|
62
|
+
const list = suggestions.map((s) => `"${s}"`).join(', ');
|
|
63
|
+
const prefix = err.message.replace(/[.!?]?\s*$/, '');
|
|
64
|
+
throw notFound(`${prefix}. Did you mean: ${list}?`, { ...(err.data ?? {}), suggestions }, { cause: err });
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* List the parent directory of `path` and return up to {@link MAX_SUGGESTIONS}
|
|
69
|
+
* close-match candidates. Match order: case-insensitive equality first, then
|
|
70
|
+
* extension-stripped equality. Returns `[]` on listing failure or empty
|
|
71
|
+
* basename. Used by callers that need suggestions without performing the
|
|
72
|
+
* underlying operation (e.g., `obsidian_open_in_ui`'s explicit messaging).
|
|
73
|
+
*/
|
|
74
|
+
export async function findSimilarPaths(ctx, svc, path) {
|
|
75
|
+
const probe = await probeParentDir(ctx, svc, path);
|
|
76
|
+
return [...probe.caseMatches, ...probe.extInsensitive].slice(0, MAX_SUGGESTIONS);
|
|
77
|
+
}
|
|
78
|
+
async function probeParentDir(ctx, svc, path) {
|
|
79
|
+
const empty = { caseMatches: [], extInsensitive: [] };
|
|
80
|
+
const normalized = path.replace(/^\/+|\/+$/g, '');
|
|
81
|
+
if (!normalized)
|
|
82
|
+
return empty;
|
|
83
|
+
const slash = normalized.lastIndexOf('/');
|
|
84
|
+
const dir = slash >= 0 ? normalized.slice(0, slash) : '';
|
|
85
|
+
const base = slash >= 0 ? normalized.slice(slash + 1) : normalized;
|
|
86
|
+
if (!base)
|
|
87
|
+
return empty;
|
|
88
|
+
let entries;
|
|
89
|
+
try {
|
|
90
|
+
const listing = await svc.listFiles(ctx, dir);
|
|
91
|
+
entries = listing.files;
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return empty;
|
|
95
|
+
}
|
|
96
|
+
const baseLower = base.toLowerCase();
|
|
97
|
+
const baseNoExt = stripExtension(baseLower);
|
|
98
|
+
const caseMatches = [];
|
|
99
|
+
const extInsensitive = [];
|
|
100
|
+
for (const entry of entries) {
|
|
101
|
+
if (entry.endsWith('/'))
|
|
102
|
+
continue;
|
|
103
|
+
const entryLower = entry.toLowerCase();
|
|
104
|
+
if (entryLower === baseLower) {
|
|
105
|
+
caseMatches.push(qualify(dir, entry));
|
|
106
|
+
}
|
|
107
|
+
else if (stripExtension(entryLower) === baseNoExt) {
|
|
108
|
+
extInsensitive.push(qualify(dir, entry));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return { caseMatches, extInsensitive };
|
|
112
|
+
}
|
|
113
|
+
function stripExtension(s) {
|
|
114
|
+
const dot = s.lastIndexOf('.');
|
|
115
|
+
return dot > 0 ? s.slice(0, dot) : s;
|
|
116
|
+
}
|
|
117
|
+
function qualify(dir, base) {
|
|
118
|
+
return dir ? `${dir}/${base}` : base;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=suggest-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggest-paths.js","sourceRoot":"","sources":["../../../../../src/mcp-server/tools/definitions/_shared/suggest-paths.ts"],"names":[],"mappings":"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"}
|