obsidian-mcp-server 2.0.6 → 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 -118
- 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
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import { BaseErrorCode, McpError } from "../../../types-global/errors.js";
|
|
2
|
-
import { ErrorHandler, logger, requestContextService, } from "../../../utils/index.js";
|
|
3
|
-
import { ObsidianSearchReplaceInputSchema, ObsidianSearchReplaceInputSchemaShape, processObsidianSearchReplace, } from "./logic.js";
|
|
4
|
-
/**
|
|
5
|
-
* Registers the 'obsidian_search_replace' tool with the MCP server.
|
|
6
|
-
*
|
|
7
|
-
* This tool performs one or more search-and-replace operations within a specified
|
|
8
|
-
* Obsidian note (identified by file path, the active file, or a periodic note).
|
|
9
|
-
* It reads the note content, applies the replacements sequentially based on the
|
|
10
|
-
* provided options (regex, case sensitivity, etc.), writes the modified content
|
|
11
|
-
* back to the vault, and returns the operation results.
|
|
12
|
-
*
|
|
13
|
-
* The response includes success status, a summary message, the total number of
|
|
14
|
-
* replacements made, formatted file statistics (timestamp, token count), and
|
|
15
|
-
* optionally the final content of the note.
|
|
16
|
-
*
|
|
17
|
-
* @param {McpServer} server - The MCP server instance to register the tool with.
|
|
18
|
-
* @param {ObsidianRestApiService} obsidianService - An instance of the Obsidian REST API service
|
|
19
|
-
* used to interact with the user's Obsidian vault.
|
|
20
|
-
* @returns {Promise<void>} A promise that resolves when the tool registration is complete or rejects on error.
|
|
21
|
-
* @throws {McpError} Throws an McpError if registration fails critically.
|
|
22
|
-
*/
|
|
23
|
-
export const registerObsidianSearchReplaceTool = async (server, obsidianService, vaultCacheService) => {
|
|
24
|
-
const toolName = "obsidian_search_replace";
|
|
25
|
-
const toolDescription = "Performs one or more search-and-replace operations within a target Obsidian note (file path, active, or periodic). Reads the file, applies replacements sequentially in memory, and writes the modified content back, overwriting the original. Supports string/regex search, case sensitivity toggle, replacing first/all occurrences, flexible whitespace matching (non-regex), and whole word matching. Returns success status, message, replacement count, a formatted timestamp string, file stats (stats), and optionally the final file content.";
|
|
26
|
-
// Create a context specifically for the registration process.
|
|
27
|
-
const registrationContext = requestContextService.createRequestContext({
|
|
28
|
-
operation: "RegisterObsidianSearchReplaceTool",
|
|
29
|
-
toolName: toolName,
|
|
30
|
-
module: "ObsidianSearchReplaceRegistration", // Identify the module
|
|
31
|
-
});
|
|
32
|
-
logger.info(`Attempting to register tool: ${toolName}`, registrationContext);
|
|
33
|
-
// Wrap the registration logic in a tryCatch block for robust error handling during server setup.
|
|
34
|
-
await ErrorHandler.tryCatch(async () => {
|
|
35
|
-
// Use the high-level SDK method `server.tool` for registration.
|
|
36
|
-
// It handles schema generation from the shape, basic validation, and routing.
|
|
37
|
-
server.tool(toolName, toolDescription, ObsidianSearchReplaceInputSchemaShape, // Provide the base Zod schema shape for input definition.
|
|
38
|
-
/**
|
|
39
|
-
* The handler function executed when the 'obsidian_search_replace' tool is called by the client.
|
|
40
|
-
*
|
|
41
|
-
* @param {ObsidianSearchReplaceRegistrationInput} params - The raw input parameters received from the client,
|
|
42
|
-
* matching the structure defined by ObsidianSearchReplaceInputSchemaShape.
|
|
43
|
-
* @returns {Promise<CallToolResult>} A promise resolving to the structured result for the MCP client,
|
|
44
|
-
* containing either the successful response data (serialized JSON) or an error indication.
|
|
45
|
-
*/
|
|
46
|
-
async (params) => {
|
|
47
|
-
// Create a specific context for this handler invocation, linked to the registration context.
|
|
48
|
-
const handlerContext = requestContextService.createRequestContext({
|
|
49
|
-
parentContext: registrationContext,
|
|
50
|
-
operation: "HandleObsidianSearchReplaceRequest",
|
|
51
|
-
toolName: toolName,
|
|
52
|
-
params: {
|
|
53
|
-
// Log key parameters for debugging (excluding potentially large replacements array)
|
|
54
|
-
targetType: params.targetType,
|
|
55
|
-
targetIdentifier: params.targetIdentifier,
|
|
56
|
-
replacementCount: params.replacements?.length ?? 0, // Log count instead of full array
|
|
57
|
-
useRegex: params.useRegex,
|
|
58
|
-
replaceAll: params.replaceAll,
|
|
59
|
-
caseSensitive: params.caseSensitive,
|
|
60
|
-
flexibleWhitespace: params.flexibleWhitespace,
|
|
61
|
-
wholeWord: params.wholeWord,
|
|
62
|
-
returnContent: params.returnContent,
|
|
63
|
-
},
|
|
64
|
-
});
|
|
65
|
-
logger.debug(`Handling '${toolName}' request`, handlerContext);
|
|
66
|
-
// Wrap the core logic execution in a tryCatch block for handling errors during processing.
|
|
67
|
-
return await ErrorHandler.tryCatch(async () => {
|
|
68
|
-
// **Crucial Step:** Explicitly parse and validate the raw input parameters using the
|
|
69
|
-
// *refined* Zod schema (`ObsidianSearchReplaceInputSchema`). This applies stricter rules
|
|
70
|
-
// and cross-field validations defined in logic.ts.
|
|
71
|
-
const validatedParams = ObsidianSearchReplaceInputSchema.parse(params);
|
|
72
|
-
logger.debug(`Input parameters successfully validated against refined schema.`, handlerContext);
|
|
73
|
-
// Delegate the actual search/replace logic to the dedicated processing function.
|
|
74
|
-
// Pass the *validated* parameters, the handler context, and the Obsidian service instance.
|
|
75
|
-
const response = await processObsidianSearchReplace(validatedParams, handlerContext, obsidianService, vaultCacheService);
|
|
76
|
-
logger.debug(`'${toolName}' processed successfully`, handlerContext);
|
|
77
|
-
// Format the successful response object from the logic function into the required MCP CallToolResult structure.
|
|
78
|
-
// The entire response object (containing success, message, count, stat, etc.) is serialized to JSON.
|
|
79
|
-
return {
|
|
80
|
-
content: [
|
|
81
|
-
{
|
|
82
|
-
type: "text", // Standard content type for structured JSON data
|
|
83
|
-
text: JSON.stringify(response, null, 2), // Pretty-print JSON for readability
|
|
84
|
-
},
|
|
85
|
-
],
|
|
86
|
-
isError: false, // Indicate successful execution to the client
|
|
87
|
-
};
|
|
88
|
-
}, {
|
|
89
|
-
// Configuration for the inner error handler (processing logic).
|
|
90
|
-
operation: `processing ${toolName} handler`,
|
|
91
|
-
context: handlerContext,
|
|
92
|
-
input: params, // Log the full raw input parameters if an error occurs during processing.
|
|
93
|
-
// Custom error mapping to ensure consistent McpError format is returned to the client.
|
|
94
|
-
errorMapper: (error) => new McpError(
|
|
95
|
-
// Use the specific code from McpError if available, otherwise default to INTERNAL_ERROR.
|
|
96
|
-
error instanceof McpError
|
|
97
|
-
? error.code
|
|
98
|
-
: BaseErrorCode.INTERNAL_ERROR, `Error processing ${toolName} tool: ${error instanceof Error ? error.message : "Unknown error"}`, { ...handlerContext }),
|
|
99
|
-
}); // End of inner ErrorHandler.tryCatch
|
|
100
|
-
}); // End of server.tool call
|
|
101
|
-
logger.info(`Tool registered successfully: ${toolName}`, registrationContext);
|
|
102
|
-
}, {
|
|
103
|
-
// Configuration for the outer error handler (registration process).
|
|
104
|
-
operation: `registering tool ${toolName}`,
|
|
105
|
-
context: registrationContext,
|
|
106
|
-
errorCode: BaseErrorCode.INTERNAL_ERROR, // Default error code for registration failure.
|
|
107
|
-
// Custom error mapping for registration failures.
|
|
108
|
-
errorMapper: (error) => new McpError(error instanceof McpError ? error.code : BaseErrorCode.INTERNAL_ERROR, `Failed to register tool '${toolName}': ${error instanceof Error ? error.message : "Unknown error"}`, { ...registrationContext }),
|
|
109
|
-
critical: true, // Treat registration failure as critical, potentially halting server startup.
|
|
110
|
-
}); // End of outer ErrorHandler.tryCatch
|
|
111
|
-
};
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Barrel file for the 'obsidian_update_note' MCP tool.
|
|
3
|
-
*
|
|
4
|
-
* This file serves as the public entry point for the obsidian_update_note tool module.
|
|
5
|
-
* It re-exports the primary registration function (`registerObsidianUpdateNoteTool`)
|
|
6
|
-
* from the './registration.js' module. This pattern simplifies imports for consumers
|
|
7
|
-
* of the tool, allowing them to import necessary components from a single location.
|
|
8
|
-
*
|
|
9
|
-
* Consumers (like the main server setup) should import the registration function
|
|
10
|
-
* from this file to integrate the tool into the MCP server instance.
|
|
11
|
-
*/
|
|
12
|
-
export { registerObsidianUpdateNoteTool } from "./registration.js";
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Barrel file for the 'obsidian_update_note' MCP tool.
|
|
3
|
-
*
|
|
4
|
-
* This file serves as the public entry point for the obsidian_update_note tool module.
|
|
5
|
-
* It re-exports the primary registration function (`registerObsidianUpdateNoteTool`)
|
|
6
|
-
* from the './registration.js' module. This pattern simplifies imports for consumers
|
|
7
|
-
* of the tool, allowing them to import necessary components from a single location.
|
|
8
|
-
*
|
|
9
|
-
* Consumers (like the main server setup) should import the registration function
|
|
10
|
-
* from this file to integrate the tool into the MCP server instance.
|
|
11
|
-
*/
|
|
12
|
-
export { registerObsidianUpdateNoteTool } from "./registration.js";
|
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import { ObsidianRestApiService, VaultCacheService } from "../../../services/obsidianRestAPI/index.js";
|
|
3
|
-
import { RequestContext } from "../../../utils/index.js";
|
|
4
|
-
/**
|
|
5
|
-
* Zod schema used for registering the tool with the MCP SDK (`server.tool`).
|
|
6
|
-
* This schema defines the expected input structure from the client's perspective.
|
|
7
|
-
* It flattens the structure slightly by making mode-specific fields optional at this stage,
|
|
8
|
-
* relying on the refined schema (`ObsidianUpdateFileInputSchema`) for stricter validation
|
|
9
|
-
* within the handler logic.
|
|
10
|
-
*/
|
|
11
|
-
declare const ObsidianUpdateNoteRegistrationSchema: z.ZodObject<{
|
|
12
|
-
/** Specifies the target note: 'filePath' (requires targetIdentifier), 'activeFile' (currently open file), or 'periodicNote' (requires targetIdentifier with period like 'daily'). */
|
|
13
|
-
targetType: z.ZodEnum<["filePath", "activeFile", "periodicNote"]>;
|
|
14
|
-
/** The content for the modification. Must be a string for whole-file operations. */
|
|
15
|
-
content: z.ZodString;
|
|
16
|
-
/** Identifier for the target when targetType is 'filePath' (vault-relative path, e.g., 'Notes/My File.md') or 'periodicNote' (period string: 'daily', 'weekly', etc.). Not used for 'activeFile'. */
|
|
17
|
-
targetIdentifier: z.ZodOptional<z.ZodString>;
|
|
18
|
-
/** Determines the modification strategy: must be 'wholeFile'. */
|
|
19
|
-
modificationType: z.ZodLiteral<"wholeFile">;
|
|
20
|
-
/** For 'wholeFile' mode: 'append', 'prepend', or 'overwrite'. Required if modificationType is 'wholeFile'. */
|
|
21
|
-
wholeFileMode: z.ZodOptional<z.ZodEnum<["append", "prepend", "overwrite"]>>;
|
|
22
|
-
/** For 'wholeFile' mode: If true (default), creates the target file/note if it doesn't exist before modifying. If false, fails if the target doesn't exist. */
|
|
23
|
-
createIfNeeded: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
24
|
-
/** For 'wholeFile' mode with 'overwrite': If false (default), the operation fails if the target file already exists. If true, allows overwriting the existing file. */
|
|
25
|
-
overwriteIfExists: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
26
|
-
/** If true, returns the final content of the file in the response. Defaults to false. */
|
|
27
|
-
returnContent: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
28
|
-
}, "strip", z.ZodTypeAny, {
|
|
29
|
-
content: string;
|
|
30
|
-
targetType: "filePath" | "activeFile" | "periodicNote";
|
|
31
|
-
returnContent: boolean;
|
|
32
|
-
modificationType: "wholeFile";
|
|
33
|
-
createIfNeeded: boolean;
|
|
34
|
-
overwriteIfExists: boolean;
|
|
35
|
-
targetIdentifier?: string | undefined;
|
|
36
|
-
wholeFileMode?: "append" | "prepend" | "overwrite" | undefined;
|
|
37
|
-
}, {
|
|
38
|
-
content: string;
|
|
39
|
-
targetType: "filePath" | "activeFile" | "periodicNote";
|
|
40
|
-
modificationType: "wholeFile";
|
|
41
|
-
targetIdentifier?: string | undefined;
|
|
42
|
-
returnContent?: boolean | undefined;
|
|
43
|
-
wholeFileMode?: "append" | "prepend" | "overwrite" | undefined;
|
|
44
|
-
createIfNeeded?: boolean | undefined;
|
|
45
|
-
overwriteIfExists?: boolean | undefined;
|
|
46
|
-
}>;
|
|
47
|
-
/**
|
|
48
|
-
* The shape of the registration schema, used by `server.tool` for basic validation.
|
|
49
|
-
* @see ObsidianUpdateFileRegistrationSchema
|
|
50
|
-
*/
|
|
51
|
-
export declare const ObsidianUpdateNoteInputSchemaShape: {
|
|
52
|
-
/** Specifies the target note: 'filePath' (requires targetIdentifier), 'activeFile' (currently open file), or 'periodicNote' (requires targetIdentifier with period like 'daily'). */
|
|
53
|
-
targetType: z.ZodEnum<["filePath", "activeFile", "periodicNote"]>;
|
|
54
|
-
/** The content for the modification. Must be a string for whole-file operations. */
|
|
55
|
-
content: z.ZodString;
|
|
56
|
-
/** Identifier for the target when targetType is 'filePath' (vault-relative path, e.g., 'Notes/My File.md') or 'periodicNote' (period string: 'daily', 'weekly', etc.). Not used for 'activeFile'. */
|
|
57
|
-
targetIdentifier: z.ZodOptional<z.ZodString>;
|
|
58
|
-
/** Determines the modification strategy: must be 'wholeFile'. */
|
|
59
|
-
modificationType: z.ZodLiteral<"wholeFile">;
|
|
60
|
-
/** For 'wholeFile' mode: 'append', 'prepend', or 'overwrite'. Required if modificationType is 'wholeFile'. */
|
|
61
|
-
wholeFileMode: z.ZodOptional<z.ZodEnum<["append", "prepend", "overwrite"]>>;
|
|
62
|
-
/** For 'wholeFile' mode: If true (default), creates the target file/note if it doesn't exist before modifying. If false, fails if the target doesn't exist. */
|
|
63
|
-
createIfNeeded: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
64
|
-
/** For 'wholeFile' mode with 'overwrite': If false (default), the operation fails if the target file already exists. If true, allows overwriting the existing file. */
|
|
65
|
-
overwriteIfExists: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
66
|
-
/** If true, returns the final content of the file in the response. Defaults to false. */
|
|
67
|
-
returnContent: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
68
|
-
};
|
|
69
|
-
/**
|
|
70
|
-
* TypeScript type inferred from the registration schema. Represents the raw input
|
|
71
|
-
* received by the tool handler *before* refinement.
|
|
72
|
-
* @see ObsidianUpdateFileRegistrationSchema
|
|
73
|
-
*/
|
|
74
|
-
export type ObsidianUpdateNoteRegistrationInput = z.infer<typeof ObsidianUpdateNoteRegistrationSchema>;
|
|
75
|
-
/**
|
|
76
|
-
* Refined Zod schema used internally within the tool's logic for strict validation.
|
|
77
|
-
* It builds upon `WholeFileUpdateSchema` and adds cross-field validation rules using `.refine()`.
|
|
78
|
-
* This ensures that `targetIdentifier` is provided and valid when required by `targetType`.
|
|
79
|
-
*/
|
|
80
|
-
export declare const ObsidianUpdateNoteInputSchema: z.ZodEffects<z.ZodObject<{
|
|
81
|
-
/** Specifies the type of target note. */
|
|
82
|
-
targetType: z.ZodEnum<["filePath", "activeFile", "periodicNote"]>;
|
|
83
|
-
/** The content to use for the modification. Must be a string for whole-file operations. */
|
|
84
|
-
content: z.ZodString;
|
|
85
|
-
/**
|
|
86
|
-
* Identifier for the target. Required and must be a vault-relative path if targetType is 'filePath'.
|
|
87
|
-
* Required and must be a valid period string (e.g., 'daily') if targetType is 'periodicNote'.
|
|
88
|
-
* Not used if targetType is 'activeFile'.
|
|
89
|
-
*/
|
|
90
|
-
targetIdentifier: z.ZodOptional<z.ZodString>;
|
|
91
|
-
} & {
|
|
92
|
-
/** The modification type, fixed to 'wholeFile'. */
|
|
93
|
-
modificationType: z.ZodLiteral<"wholeFile">;
|
|
94
|
-
/** The specific whole-file operation ('append', 'prepend', 'overwrite'). */
|
|
95
|
-
wholeFileMode: z.ZodEnum<["append", "prepend", "overwrite"]>;
|
|
96
|
-
/** If true (default), creates the target file/note if it doesn't exist before applying the modification. If false, the operation fails if the target doesn't exist. */
|
|
97
|
-
createIfNeeded: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
98
|
-
/** Only relevant for 'overwrite' mode. If true, allows overwriting an existing file. If false (default) and the file exists, the 'overwrite' operation fails. */
|
|
99
|
-
overwriteIfExists: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
100
|
-
/** If true, includes the final content of the modified file in the response. Defaults to false. */
|
|
101
|
-
returnContent: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
102
|
-
}, "strip", z.ZodTypeAny, {
|
|
103
|
-
content: string;
|
|
104
|
-
targetType: "filePath" | "activeFile" | "periodicNote";
|
|
105
|
-
returnContent: boolean;
|
|
106
|
-
modificationType: "wholeFile";
|
|
107
|
-
wholeFileMode: "append" | "prepend" | "overwrite";
|
|
108
|
-
createIfNeeded: boolean;
|
|
109
|
-
overwriteIfExists: boolean;
|
|
110
|
-
targetIdentifier?: string | undefined;
|
|
111
|
-
}, {
|
|
112
|
-
content: string;
|
|
113
|
-
targetType: "filePath" | "activeFile" | "periodicNote";
|
|
114
|
-
modificationType: "wholeFile";
|
|
115
|
-
wholeFileMode: "append" | "prepend" | "overwrite";
|
|
116
|
-
targetIdentifier?: string | undefined;
|
|
117
|
-
returnContent?: boolean | undefined;
|
|
118
|
-
createIfNeeded?: boolean | undefined;
|
|
119
|
-
overwriteIfExists?: boolean | undefined;
|
|
120
|
-
}>, {
|
|
121
|
-
content: string;
|
|
122
|
-
targetType: "filePath" | "activeFile" | "periodicNote";
|
|
123
|
-
returnContent: boolean;
|
|
124
|
-
modificationType: "wholeFile";
|
|
125
|
-
wholeFileMode: "append" | "prepend" | "overwrite";
|
|
126
|
-
createIfNeeded: boolean;
|
|
127
|
-
overwriteIfExists: boolean;
|
|
128
|
-
targetIdentifier?: string | undefined;
|
|
129
|
-
}, {
|
|
130
|
-
content: string;
|
|
131
|
-
targetType: "filePath" | "activeFile" | "periodicNote";
|
|
132
|
-
modificationType: "wholeFile";
|
|
133
|
-
wholeFileMode: "append" | "prepend" | "overwrite";
|
|
134
|
-
targetIdentifier?: string | undefined;
|
|
135
|
-
returnContent?: boolean | undefined;
|
|
136
|
-
createIfNeeded?: boolean | undefined;
|
|
137
|
-
overwriteIfExists?: boolean | undefined;
|
|
138
|
-
}>;
|
|
139
|
-
/**
|
|
140
|
-
* TypeScript type inferred from the *refined* input schema (`ObsidianUpdateFileInputSchema`).
|
|
141
|
-
* This type represents the validated and structured input used within the core processing logic.
|
|
142
|
-
*/
|
|
143
|
-
export type ObsidianUpdateNoteInput = z.infer<typeof ObsidianUpdateNoteInputSchema>;
|
|
144
|
-
/**
|
|
145
|
-
* Represents the structure of file statistics after formatting, including
|
|
146
|
-
* human-readable timestamps and an estimated token count.
|
|
147
|
-
*/
|
|
148
|
-
type FormattedStat = {
|
|
149
|
-
/** Creation time formatted as a standard date-time string. */
|
|
150
|
-
createdTime: string;
|
|
151
|
-
/** Last modified time formatted as a standard date-time string. */
|
|
152
|
-
modifiedTime: string;
|
|
153
|
-
/** Estimated token count of the file content (using tiktoken 'gpt-4o'). */
|
|
154
|
-
tokenCountEstimate: number;
|
|
155
|
-
};
|
|
156
|
-
/**
|
|
157
|
-
* Defines the structure of the successful response returned by the `processObsidianUpdateFile` function.
|
|
158
|
-
* This object is typically serialized to JSON and sent back to the client.
|
|
159
|
-
*/
|
|
160
|
-
export interface ObsidianUpdateNoteResponse {
|
|
161
|
-
/** Indicates whether the operation was successful. */
|
|
162
|
-
success: boolean;
|
|
163
|
-
/** A human-readable message describing the outcome of the operation. */
|
|
164
|
-
message: string;
|
|
165
|
-
/** Optional file statistics (creation/modification times, token count) if the file could be read after the update. */
|
|
166
|
-
stats?: FormattedStat;
|
|
167
|
-
/** Optional final content of the file, included only if `returnContent` was true in the request and the file could be read. */
|
|
168
|
-
finalContent?: string;
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Processes the core logic for the 'obsidian_update_file' tool when using the 'wholeFile'
|
|
172
|
-
* modification type (append, prepend, overwrite). It handles pre-checks, performs the
|
|
173
|
-
* update via the Obsidian REST API, retrieves the final state, and constructs the response.
|
|
174
|
-
*
|
|
175
|
-
* @param {ObsidianUpdateFileInput} params - The validated input parameters conforming to the refined schema.
|
|
176
|
-
* @param {RequestContext} context - The request context for logging and correlation.
|
|
177
|
-
* @param {ObsidianRestApiService} obsidianService - The instance of the Obsidian REST API service.
|
|
178
|
-
* @returns {Promise<ObsidianUpdateFileResponse>} A promise resolving to the structured success response.
|
|
179
|
-
* @throws {McpError} Throws an McpError if validation fails or the API interaction results in an error.
|
|
180
|
-
*/
|
|
181
|
-
export declare const processObsidianUpdateNote: (params: ObsidianUpdateNoteInput, // Use the refined, validated type
|
|
182
|
-
context: RequestContext, obsidianService: ObsidianRestApiService, vaultCacheService: VaultCacheService | undefined) => Promise<ObsidianUpdateNoteResponse>;
|
|
183
|
-
export {};
|