obsidian-mcp-server 2.0.7 → 3.1.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/3.1.x/3.1.0.md +26 -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 +582 -0
- package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/index.js +40 -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 +48 -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 +100 -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 +83 -0
- package/dist/services/obsidian/obsidian-service.d.ts.map +1 -0
- package/dist/services/obsidian/obsidian-service.js +435 -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
|
@@ -1,208 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Configures and starts the Streamable HTTP MCP transport using Hono.
|
|
3
|
-
* This module integrates the `@modelcontextprotocol/sdk`'s `StreamableHTTPServerTransport`
|
|
4
|
-
* into a Hono web server. Its responsibilities include:
|
|
5
|
-
* - Creating a Hono server instance.
|
|
6
|
-
* - Applying and configuring middleware for CORS, rate limiting, and authentication (JWT/OAuth).
|
|
7
|
-
* - Defining the routes (`/mcp` endpoint for POST, GET, DELETE) to handle the MCP lifecycle.
|
|
8
|
-
* - Orchestrating session management by mapping session IDs to SDK transport instances.
|
|
9
|
-
* - Implementing port-binding logic with automatic retry on conflicts.
|
|
10
|
-
*
|
|
11
|
-
* The underlying implementation of the MCP Streamable HTTP specification, including
|
|
12
|
-
* Server-Sent Events (SSE) for streaming, is handled by the SDK's transport class.
|
|
13
|
-
*
|
|
14
|
-
* Specification Reference:
|
|
15
|
-
* https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/docs/specification/2025-03-26/basic/transports.mdx#streamable-http
|
|
16
|
-
* @module src/mcp-server/transports/httpTransport
|
|
17
|
-
*/
|
|
18
|
-
import { serve } from "@hono/node-server";
|
|
19
|
-
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
20
|
-
import { isInitializeRequest } from "@modelcontextprotocol/sdk/types.js";
|
|
21
|
-
import { Hono } from "hono";
|
|
22
|
-
import { cors } from "hono/cors";
|
|
23
|
-
import http from "http";
|
|
24
|
-
import { randomUUID } from "node:crypto";
|
|
25
|
-
import { config } from "../../config/index.js";
|
|
26
|
-
import { BaseErrorCode, McpError } from "../../types-global/errors.js";
|
|
27
|
-
import { logger, rateLimiter, requestContextService, } from "../../utils/index.js";
|
|
28
|
-
import { jwtAuthMiddleware, oauthMiddleware, } from "./auth/index.js";
|
|
29
|
-
import { httpErrorHandler } from "./httpErrorHandler.js";
|
|
30
|
-
const HTTP_PORT = config.mcpHttpPort;
|
|
31
|
-
const HTTP_HOST = config.mcpHttpHost;
|
|
32
|
-
const MCP_ENDPOINT_PATH = "/mcp";
|
|
33
|
-
const MAX_PORT_RETRIES = 15;
|
|
34
|
-
// The transports map will store active sessions, keyed by session ID.
|
|
35
|
-
// NOTE: This is an in-memory session store, which is a known limitation for scalability.
|
|
36
|
-
// It will not work in a multi-process (clustered) or serverless environment.
|
|
37
|
-
// For a scalable deployment, this would need to be replaced with a distributed
|
|
38
|
-
// store like Redis or Memcached.
|
|
39
|
-
const transports = {};
|
|
40
|
-
async function isPortInUse(port, host, parentContext) {
|
|
41
|
-
const checkContext = requestContextService.createRequestContext({
|
|
42
|
-
...parentContext,
|
|
43
|
-
operation: "isPortInUse",
|
|
44
|
-
port,
|
|
45
|
-
host,
|
|
46
|
-
});
|
|
47
|
-
return new Promise((resolve) => {
|
|
48
|
-
const tempServer = http.createServer();
|
|
49
|
-
tempServer
|
|
50
|
-
.once("error", (err) => {
|
|
51
|
-
resolve(err.code === "EADDRINUSE");
|
|
52
|
-
})
|
|
53
|
-
.once("listening", () => {
|
|
54
|
-
tempServer.close(() => resolve(false));
|
|
55
|
-
})
|
|
56
|
-
.listen(port, host);
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
function startHttpServerWithRetry(app, initialPort, host, maxRetries, parentContext) {
|
|
60
|
-
const startContext = requestContextService.createRequestContext({
|
|
61
|
-
...parentContext,
|
|
62
|
-
operation: "startHttpServerWithRetry",
|
|
63
|
-
});
|
|
64
|
-
return new Promise(async (resolve, reject) => {
|
|
65
|
-
for (let i = 0; i <= maxRetries; i++) {
|
|
66
|
-
const currentPort = initialPort + i;
|
|
67
|
-
const attemptContext = {
|
|
68
|
-
...startContext,
|
|
69
|
-
port: currentPort,
|
|
70
|
-
attempt: i + 1,
|
|
71
|
-
};
|
|
72
|
-
if (await isPortInUse(currentPort, host, attemptContext)) {
|
|
73
|
-
logger.warning(`Port ${currentPort} is in use, retrying...`, attemptContext);
|
|
74
|
-
continue;
|
|
75
|
-
}
|
|
76
|
-
try {
|
|
77
|
-
const serverInstance = serve({ fetch: app.fetch, port: currentPort, hostname: host }, (info) => {
|
|
78
|
-
const serverAddress = `http://${info.address}:${info.port}${MCP_ENDPOINT_PATH}`;
|
|
79
|
-
logger.info(`HTTP transport listening at ${serverAddress}`, {
|
|
80
|
-
...attemptContext,
|
|
81
|
-
address: serverAddress,
|
|
82
|
-
});
|
|
83
|
-
if (process.stdout.isTTY) {
|
|
84
|
-
console.log(`\n🚀 MCP Server running at: ${serverAddress}\n`);
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
resolve(serverInstance);
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
catch (err) {
|
|
91
|
-
if (err.code !== "EADDRINUSE") {
|
|
92
|
-
reject(err);
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
reject(new Error("Failed to bind to any port after multiple retries."));
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
export async function startHttpTransport(createServerInstanceFn, parentContext) {
|
|
101
|
-
const app = new Hono();
|
|
102
|
-
const transportContext = requestContextService.createRequestContext({
|
|
103
|
-
...parentContext,
|
|
104
|
-
component: "HttpTransportSetup",
|
|
105
|
-
});
|
|
106
|
-
app.use("*", cors({
|
|
107
|
-
origin: config.mcpAllowedOrigins || [],
|
|
108
|
-
allowMethods: ["GET", "POST", "DELETE", "OPTIONS"],
|
|
109
|
-
allowHeaders: [
|
|
110
|
-
"Content-Type",
|
|
111
|
-
"Mcp-Session-Id",
|
|
112
|
-
"Last-Event-ID",
|
|
113
|
-
"Authorization",
|
|
114
|
-
],
|
|
115
|
-
credentials: true,
|
|
116
|
-
}));
|
|
117
|
-
app.use("*", async (c, next) => {
|
|
118
|
-
c.res.headers.set("X-Content-Type-Options", "nosniff");
|
|
119
|
-
await next();
|
|
120
|
-
});
|
|
121
|
-
app.use(MCP_ENDPOINT_PATH, async (c, next) => {
|
|
122
|
-
// NOTE (Security): The 'x-forwarded-for' header is used for rate limiting.
|
|
123
|
-
// This is only secure if the server is run behind a trusted proxy that
|
|
124
|
-
// correctly sets or validates this header.
|
|
125
|
-
const clientIp = c.req.header("x-forwarded-for")?.split(",")[0].trim() || "unknown_ip";
|
|
126
|
-
const context = requestContextService.createRequestContext({
|
|
127
|
-
operation: "httpRateLimitCheck",
|
|
128
|
-
ipAddress: clientIp,
|
|
129
|
-
});
|
|
130
|
-
// Let the centralized error handler catch rate limit errors
|
|
131
|
-
rateLimiter.check(clientIp, context);
|
|
132
|
-
await next();
|
|
133
|
-
});
|
|
134
|
-
if (config.mcpAuthMode === "oauth") {
|
|
135
|
-
app.use(MCP_ENDPOINT_PATH, oauthMiddleware);
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
app.use(MCP_ENDPOINT_PATH, jwtAuthMiddleware);
|
|
139
|
-
}
|
|
140
|
-
// Centralized Error Handling
|
|
141
|
-
app.onError(httpErrorHandler);
|
|
142
|
-
app.post(MCP_ENDPOINT_PATH, async (c) => {
|
|
143
|
-
const postContext = requestContextService.createRequestContext({
|
|
144
|
-
...transportContext,
|
|
145
|
-
operation: "handlePost",
|
|
146
|
-
});
|
|
147
|
-
const body = await c.req.json();
|
|
148
|
-
const sessionId = c.req.header("mcp-session-id");
|
|
149
|
-
let transport = sessionId
|
|
150
|
-
? transports[sessionId]
|
|
151
|
-
: undefined;
|
|
152
|
-
if (isInitializeRequest(body)) {
|
|
153
|
-
// If a transport already exists for a session, it's a re-initialization.
|
|
154
|
-
if (transport) {
|
|
155
|
-
logger.warning("Re-initializing existing session.", {
|
|
156
|
-
...postContext,
|
|
157
|
-
sessionId,
|
|
158
|
-
});
|
|
159
|
-
await transport.close(); // This will trigger the onclose handler.
|
|
160
|
-
}
|
|
161
|
-
// Create a new transport for a new session.
|
|
162
|
-
const newTransport = new StreamableHTTPServerTransport({
|
|
163
|
-
sessionIdGenerator: () => randomUUID(),
|
|
164
|
-
onsessioninitialized: (newId) => {
|
|
165
|
-
transports[newId] = newTransport;
|
|
166
|
-
logger.info(`HTTP Session created: ${newId}`, {
|
|
167
|
-
...postContext,
|
|
168
|
-
newSessionId: newId,
|
|
169
|
-
});
|
|
170
|
-
},
|
|
171
|
-
});
|
|
172
|
-
// Set up cleanup logic for when the transport is closed.
|
|
173
|
-
newTransport.onclose = () => {
|
|
174
|
-
const closedSessionId = newTransport.sessionId;
|
|
175
|
-
if (closedSessionId && transports[closedSessionId]) {
|
|
176
|
-
delete transports[closedSessionId];
|
|
177
|
-
logger.info(`HTTP Session closed: ${closedSessionId}`, {
|
|
178
|
-
...postContext,
|
|
179
|
-
closedSessionId,
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
};
|
|
183
|
-
// Connect the new transport to a new server instance.
|
|
184
|
-
const server = await createServerInstanceFn();
|
|
185
|
-
await server.connect(newTransport);
|
|
186
|
-
transport = newTransport;
|
|
187
|
-
}
|
|
188
|
-
else if (!transport) {
|
|
189
|
-
// If it's not an initialization request and no transport was found, it's an error.
|
|
190
|
-
throw new McpError(BaseErrorCode.NOT_FOUND, "Invalid or expired session ID.");
|
|
191
|
-
}
|
|
192
|
-
// Pass the request to the transport to handle.
|
|
193
|
-
return await transport.handleRequest(c.env.incoming, c.env.outgoing, body);
|
|
194
|
-
});
|
|
195
|
-
// A reusable handler for GET and DELETE requests which operate on existing sessions.
|
|
196
|
-
const handleSessionRequest = async (c) => {
|
|
197
|
-
const sessionId = c.req.header("mcp-session-id");
|
|
198
|
-
const transport = sessionId ? transports[sessionId] : undefined;
|
|
199
|
-
if (!transport) {
|
|
200
|
-
throw new McpError(BaseErrorCode.NOT_FOUND, "Session not found or expired.");
|
|
201
|
-
}
|
|
202
|
-
// Let the transport handle the streaming (GET) or termination (DELETE) request.
|
|
203
|
-
return await transport.handleRequest(c.env.incoming, c.env.outgoing);
|
|
204
|
-
};
|
|
205
|
-
app.get(MCP_ENDPOINT_PATH, handleSessionRequest);
|
|
206
|
-
app.delete(MCP_ENDPOINT_PATH, handleSessionRequest);
|
|
207
|
-
return startHttpServerWithRetry(app, HTTP_PORT, HTTP_HOST, MAX_PORT_RETRIES, transportContext);
|
|
208
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Handles the setup and connection for the Stdio MCP transport.
|
|
3
|
-
* Implements the MCP Specification 2025-03-26 for stdio transport.
|
|
4
|
-
* This transport communicates directly over standard input (stdin) and
|
|
5
|
-
* standard output (stdout), typically used when the MCP server is launched
|
|
6
|
-
* as a child process by a host application.
|
|
7
|
-
*
|
|
8
|
-
* Specification Reference:
|
|
9
|
-
* https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/docs/specification/2025-03-26/basic/transports.mdx#stdio
|
|
10
|
-
*
|
|
11
|
-
* --- Authentication Note ---
|
|
12
|
-
* As per the MCP Authorization Specification (2025-03-26, Section 1.2),
|
|
13
|
-
* STDIO transports SHOULD NOT implement HTTP-based authentication flows.
|
|
14
|
-
* Authorization is typically handled implicitly by the host application
|
|
15
|
-
* controlling the server process. This implementation follows that guideline.
|
|
16
|
-
*
|
|
17
|
-
* @see {@link https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/docs/specification/2025-03-26/basic/authorization.mdx | MCP Authorization Specification}
|
|
18
|
-
* @module src/mcp-server/transports/stdioTransport
|
|
19
|
-
*/
|
|
20
|
-
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
21
|
-
import { RequestContext } from "../../utils/index.js";
|
|
22
|
-
/**
|
|
23
|
-
* Connects a given `McpServer` instance to the Stdio transport.
|
|
24
|
-
* This function initializes the SDK's `StdioServerTransport`, which manages
|
|
25
|
-
* communication over `process.stdin` and `process.stdout` according to the
|
|
26
|
-
* MCP stdio transport specification.
|
|
27
|
-
*
|
|
28
|
-
* MCP Spec Points Covered by SDK's `StdioServerTransport`:
|
|
29
|
-
* - Reads JSON-RPC messages (requests, notifications, responses, batches) from stdin.
|
|
30
|
-
* - Writes JSON-RPC messages to stdout.
|
|
31
|
-
* - Handles newline delimiters and ensures no embedded newlines in output messages.
|
|
32
|
-
* - Ensures only valid MCP messages are written to stdout.
|
|
33
|
-
*
|
|
34
|
-
* Logging via the `logger` utility MAY result in output to stderr, which is
|
|
35
|
-
* permitted by the spec for logging purposes.
|
|
36
|
-
*
|
|
37
|
-
* @param server - The `McpServer` instance.
|
|
38
|
-
* @param parentContext - The logging and tracing context from the calling function.
|
|
39
|
-
* @returns A promise that resolves when the Stdio transport is successfully connected.
|
|
40
|
-
* @throws {Error} If the connection fails during setup.
|
|
41
|
-
*/
|
|
42
|
-
export declare function connectStdioTransport(server: McpServer, parentContext: RequestContext): Promise<void>;
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Handles the setup and connection for the Stdio MCP transport.
|
|
3
|
-
* Implements the MCP Specification 2025-03-26 for stdio transport.
|
|
4
|
-
* This transport communicates directly over standard input (stdin) and
|
|
5
|
-
* standard output (stdout), typically used when the MCP server is launched
|
|
6
|
-
* as a child process by a host application.
|
|
7
|
-
*
|
|
8
|
-
* Specification Reference:
|
|
9
|
-
* https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/docs/specification/2025-03-26/basic/transports.mdx#stdio
|
|
10
|
-
*
|
|
11
|
-
* --- Authentication Note ---
|
|
12
|
-
* As per the MCP Authorization Specification (2025-03-26, Section 1.2),
|
|
13
|
-
* STDIO transports SHOULD NOT implement HTTP-based authentication flows.
|
|
14
|
-
* Authorization is typically handled implicitly by the host application
|
|
15
|
-
* controlling the server process. This implementation follows that guideline.
|
|
16
|
-
*
|
|
17
|
-
* @see {@link https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/docs/specification/2025-03-26/basic/authorization.mdx | MCP Authorization Specification}
|
|
18
|
-
* @module src/mcp-server/transports/stdioTransport
|
|
19
|
-
*/
|
|
20
|
-
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
21
|
-
import { ErrorHandler, logger } from "../../utils/index.js";
|
|
22
|
-
/**
|
|
23
|
-
* Connects a given `McpServer` instance to the Stdio transport.
|
|
24
|
-
* This function initializes the SDK's `StdioServerTransport`, which manages
|
|
25
|
-
* communication over `process.stdin` and `process.stdout` according to the
|
|
26
|
-
* MCP stdio transport specification.
|
|
27
|
-
*
|
|
28
|
-
* MCP Spec Points Covered by SDK's `StdioServerTransport`:
|
|
29
|
-
* - Reads JSON-RPC messages (requests, notifications, responses, batches) from stdin.
|
|
30
|
-
* - Writes JSON-RPC messages to stdout.
|
|
31
|
-
* - Handles newline delimiters and ensures no embedded newlines in output messages.
|
|
32
|
-
* - Ensures only valid MCP messages are written to stdout.
|
|
33
|
-
*
|
|
34
|
-
* Logging via the `logger` utility MAY result in output to stderr, which is
|
|
35
|
-
* permitted by the spec for logging purposes.
|
|
36
|
-
*
|
|
37
|
-
* @param server - The `McpServer` instance.
|
|
38
|
-
* @param parentContext - The logging and tracing context from the calling function.
|
|
39
|
-
* @returns A promise that resolves when the Stdio transport is successfully connected.
|
|
40
|
-
* @throws {Error} If the connection fails during setup.
|
|
41
|
-
*/
|
|
42
|
-
export async function connectStdioTransport(server, parentContext) {
|
|
43
|
-
const operationContext = {
|
|
44
|
-
...parentContext,
|
|
45
|
-
operation: "connectStdioTransport",
|
|
46
|
-
transportType: "Stdio",
|
|
47
|
-
};
|
|
48
|
-
logger.debug("Attempting to connect stdio transport...", operationContext);
|
|
49
|
-
try {
|
|
50
|
-
logger.debug("Creating StdioServerTransport instance...", operationContext);
|
|
51
|
-
const transport = new StdioServerTransport();
|
|
52
|
-
logger.debug("Connecting McpServer instance to StdioServerTransport...", operationContext);
|
|
53
|
-
await server.connect(transport);
|
|
54
|
-
logger.info("MCP Server connected and listening via stdio transport.", operationContext);
|
|
55
|
-
if (process.stdout.isTTY) {
|
|
56
|
-
console.log(`\n🚀 MCP Server running in STDIO mode.\n (MCP Spec: 2025-03-26 Stdio Transport)\n`);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
catch (err) {
|
|
60
|
-
ErrorHandler.handleError(err, { ...operationContext, critical: true });
|
|
61
|
-
throw err; // Re-throw after handling to allow caller to react if necessary
|
|
62
|
-
}
|
|
63
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module ObsidianRestApiService Barrel File
|
|
3
|
-
* @description
|
|
4
|
-
* Exports the singleton instance of the Obsidian REST API service and related types.
|
|
5
|
-
*/
|
|
6
|
-
export * from "./types.js";
|
|
7
|
-
export { ObsidianRestApiService } from "./service.js";
|
|
8
|
-
export * as activeFileMethods from "./methods/activeFileMethods.js";
|
|
9
|
-
export * as commandMethods from "./methods/commandMethods.js";
|
|
10
|
-
export * as openMethods from "./methods/openMethods.js";
|
|
11
|
-
export * as patchMethods from "./methods/patchMethods.js";
|
|
12
|
-
export * as periodicNoteMethods from "./methods/periodicNoteMethods.js";
|
|
13
|
-
export * as searchMethods from "./methods/searchMethods.js";
|
|
14
|
-
export * as vaultMethods from "./methods/vaultMethods.js";
|
|
15
|
-
export { VaultCacheService } from "./vaultCache/index.js";
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module ObsidianRestApiService Barrel File
|
|
3
|
-
* @description
|
|
4
|
-
* Exports the singleton instance of the Obsidian REST API service and related types.
|
|
5
|
-
*/
|
|
6
|
-
export * from "./types.js"; // Export all types
|
|
7
|
-
// Removed singleton export
|
|
8
|
-
export { ObsidianRestApiService } from "./service.js"; // Export the class itself
|
|
9
|
-
// Export method modules if direct access is desired, though typically accessed via service instance
|
|
10
|
-
export * as activeFileMethods from "./methods/activeFileMethods.js";
|
|
11
|
-
export * as commandMethods from "./methods/commandMethods.js";
|
|
12
|
-
export * as openMethods from "./methods/openMethods.js";
|
|
13
|
-
export * as patchMethods from "./methods/patchMethods.js";
|
|
14
|
-
export * as periodicNoteMethods from "./methods/periodicNoteMethods.js";
|
|
15
|
-
export * as searchMethods from "./methods/searchMethods.js";
|
|
16
|
-
export * as vaultMethods from "./methods/vaultMethods.js";
|
|
17
|
-
export { VaultCacheService } from "./vaultCache/index.js";
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module ActiveFileMethods
|
|
3
|
-
* @description
|
|
4
|
-
* Methods for interacting with the currently active file in Obsidian via the REST API.
|
|
5
|
-
*/
|
|
6
|
-
import { RequestContext } from "../../../utils/index.js";
|
|
7
|
-
import { NoteJson, RequestFunction } from "../types.js";
|
|
8
|
-
/**
|
|
9
|
-
* Gets the content of the currently active file in Obsidian.
|
|
10
|
-
* @param _request - The internal request function from the service instance.
|
|
11
|
-
* @param format - 'markdown' or 'json' (for NoteJson).
|
|
12
|
-
* @param context - Request context.
|
|
13
|
-
* @returns The file content (string) or NoteJson object.
|
|
14
|
-
*/
|
|
15
|
-
export declare function getActiveFile(_request: RequestFunction, format: "markdown" | "json" | undefined, context: RequestContext): Promise<string | NoteJson>;
|
|
16
|
-
/**
|
|
17
|
-
* Updates (overwrites) the content of the currently active file.
|
|
18
|
-
* @param _request - The internal request function from the service instance.
|
|
19
|
-
* @param content - The new content.
|
|
20
|
-
* @param context - Request context.
|
|
21
|
-
* @returns {Promise<void>} Resolves on success (204 No Content).
|
|
22
|
-
*/
|
|
23
|
-
export declare function updateActiveFile(_request: RequestFunction, content: string, context: RequestContext): Promise<void>;
|
|
24
|
-
/**
|
|
25
|
-
* Appends content to the end of the currently active file.
|
|
26
|
-
* @param _request - The internal request function from the service instance.
|
|
27
|
-
* @param content - The content to append.
|
|
28
|
-
* @param context - Request context.
|
|
29
|
-
* @returns {Promise<void>} Resolves on success (204 No Content).
|
|
30
|
-
*/
|
|
31
|
-
export declare function appendActiveFile(_request: RequestFunction, content: string, context: RequestContext): Promise<void>;
|
|
32
|
-
/**
|
|
33
|
-
* Deletes the currently active file.
|
|
34
|
-
* @param _request - The internal request function from the service instance.
|
|
35
|
-
* @param context - Request context.
|
|
36
|
-
* @returns {Promise<void>} Resolves on success (204 No Content).
|
|
37
|
-
*/
|
|
38
|
-
export declare function deleteActiveFile(_request: RequestFunction, context: RequestContext): Promise<void>;
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module ActiveFileMethods
|
|
3
|
-
* @description
|
|
4
|
-
* Methods for interacting with the currently active file in Obsidian via the REST API.
|
|
5
|
-
*/
|
|
6
|
-
/**
|
|
7
|
-
* Gets the content of the currently active file in Obsidian.
|
|
8
|
-
* @param _request - The internal request function from the service instance.
|
|
9
|
-
* @param format - 'markdown' or 'json' (for NoteJson).
|
|
10
|
-
* @param context - Request context.
|
|
11
|
-
* @returns The file content (string) or NoteJson object.
|
|
12
|
-
*/
|
|
13
|
-
export async function getActiveFile(_request, format = "markdown", context) {
|
|
14
|
-
const acceptHeader = format === "json" ? "application/vnd.olrapi.note+json" : "text/markdown";
|
|
15
|
-
return _request({
|
|
16
|
-
method: "GET",
|
|
17
|
-
url: `/active/`,
|
|
18
|
-
headers: { Accept: acceptHeader },
|
|
19
|
-
}, context, "getActiveFile");
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Updates (overwrites) the content of the currently active file.
|
|
23
|
-
* @param _request - The internal request function from the service instance.
|
|
24
|
-
* @param content - The new content.
|
|
25
|
-
* @param context - Request context.
|
|
26
|
-
* @returns {Promise<void>} Resolves on success (204 No Content).
|
|
27
|
-
*/
|
|
28
|
-
export async function updateActiveFile(_request, content, context) {
|
|
29
|
-
await _request({
|
|
30
|
-
method: "PUT",
|
|
31
|
-
url: `/active/`,
|
|
32
|
-
headers: { "Content-Type": "text/markdown" },
|
|
33
|
-
data: content,
|
|
34
|
-
}, context, "updateActiveFile");
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Appends content to the end of the currently active file.
|
|
38
|
-
* @param _request - The internal request function from the service instance.
|
|
39
|
-
* @param content - The content to append.
|
|
40
|
-
* @param context - Request context.
|
|
41
|
-
* @returns {Promise<void>} Resolves on success (204 No Content).
|
|
42
|
-
*/
|
|
43
|
-
export async function appendActiveFile(_request, content, context) {
|
|
44
|
-
await _request({
|
|
45
|
-
method: "POST",
|
|
46
|
-
url: `/active/`,
|
|
47
|
-
headers: { "Content-Type": "text/markdown" },
|
|
48
|
-
data: content,
|
|
49
|
-
}, context, "appendActiveFile");
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Deletes the currently active file.
|
|
53
|
-
* @param _request - The internal request function from the service instance.
|
|
54
|
-
* @param context - Request context.
|
|
55
|
-
* @returns {Promise<void>} Resolves on success (204 No Content).
|
|
56
|
-
*/
|
|
57
|
-
export async function deleteActiveFile(_request, context) {
|
|
58
|
-
await _request({
|
|
59
|
-
method: "DELETE",
|
|
60
|
-
url: `/active/`,
|
|
61
|
-
}, context, "deleteActiveFile");
|
|
62
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module CommandMethods
|
|
3
|
-
* @description
|
|
4
|
-
* Methods for interacting with Obsidian commands via the REST API.
|
|
5
|
-
*/
|
|
6
|
-
import { RequestContext } from "../../../utils/index.js";
|
|
7
|
-
import { ObsidianCommand, RequestFunction } from "../types.js";
|
|
8
|
-
/**
|
|
9
|
-
* Executes a registered Obsidian command by its ID.
|
|
10
|
-
* @param _request - The internal request function from the service instance.
|
|
11
|
-
* @param commandId - The ID of the command (e.g., "app:go-back").
|
|
12
|
-
* @param context - Request context.
|
|
13
|
-
* @returns {Promise<void>} Resolves on success (204 No Content).
|
|
14
|
-
*/
|
|
15
|
-
export declare function executeCommand(_request: RequestFunction, commandId: string, context: RequestContext): Promise<void>;
|
|
16
|
-
/**
|
|
17
|
-
* Lists all available Obsidian commands.
|
|
18
|
-
* @param _request - The internal request function from the service instance.
|
|
19
|
-
* @param context - Request context.
|
|
20
|
-
* @returns A list of available commands.
|
|
21
|
-
*/
|
|
22
|
-
export declare function listCommands(_request: RequestFunction, context: RequestContext): Promise<ObsidianCommand[]>;
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module CommandMethods
|
|
3
|
-
* @description
|
|
4
|
-
* Methods for interacting with Obsidian commands via the REST API.
|
|
5
|
-
*/
|
|
6
|
-
/**
|
|
7
|
-
* Executes a registered Obsidian command by its ID.
|
|
8
|
-
* @param _request - The internal request function from the service instance.
|
|
9
|
-
* @param commandId - The ID of the command (e.g., "app:go-back").
|
|
10
|
-
* @param context - Request context.
|
|
11
|
-
* @returns {Promise<void>} Resolves on success (204 No Content).
|
|
12
|
-
*/
|
|
13
|
-
export async function executeCommand(_request, commandId, context) {
|
|
14
|
-
await _request({
|
|
15
|
-
method: "POST",
|
|
16
|
-
url: `/commands/${encodeURIComponent(commandId)}/`,
|
|
17
|
-
}, context, "executeCommand");
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Lists all available Obsidian commands.
|
|
21
|
-
* @param _request - The internal request function from the service instance.
|
|
22
|
-
* @param context - Request context.
|
|
23
|
-
* @returns A list of available commands.
|
|
24
|
-
*/
|
|
25
|
-
export async function listCommands(_request, context) {
|
|
26
|
-
const response = await _request({
|
|
27
|
-
method: "GET",
|
|
28
|
-
url: "/commands/",
|
|
29
|
-
}, context, "listCommands");
|
|
30
|
-
return response.commands;
|
|
31
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module OpenMethods
|
|
3
|
-
* @description
|
|
4
|
-
* Methods for opening files in Obsidian via the REST API.
|
|
5
|
-
*/
|
|
6
|
-
import { RequestContext } from "../../../utils/index.js";
|
|
7
|
-
import { RequestFunction } from "../types.js";
|
|
8
|
-
/**
|
|
9
|
-
* Opens a specific file in Obsidian. Creates the file if it doesn't exist.
|
|
10
|
-
* @param _request - The internal request function from the service instance.
|
|
11
|
-
* @param filePath - Vault-relative path to the file.
|
|
12
|
-
* @param newLeaf - Whether to open the file in a new editor tab (leaf).
|
|
13
|
-
* @param context - Request context.
|
|
14
|
-
* @returns {Promise<void>} Resolves on success (200 OK, but no body expected).
|
|
15
|
-
*/
|
|
16
|
-
export declare function openFile(_request: RequestFunction, filePath: string, newLeaf: boolean | undefined, context: RequestContext): Promise<void>;
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module OpenMethods
|
|
3
|
-
* @description
|
|
4
|
-
* Methods for opening files in Obsidian via the REST API.
|
|
5
|
-
*/
|
|
6
|
-
/**
|
|
7
|
-
* Opens a specific file in Obsidian. Creates the file if it doesn't exist.
|
|
8
|
-
* @param _request - The internal request function from the service instance.
|
|
9
|
-
* @param filePath - Vault-relative path to the file.
|
|
10
|
-
* @param newLeaf - Whether to open the file in a new editor tab (leaf).
|
|
11
|
-
* @param context - Request context.
|
|
12
|
-
* @returns {Promise<void>} Resolves on success (200 OK, but no body expected).
|
|
13
|
-
*/
|
|
14
|
-
export async function openFile(_request, filePath, newLeaf = false, context) {
|
|
15
|
-
// This endpoint returns 200 OK, not 204
|
|
16
|
-
await _request({
|
|
17
|
-
method: "POST",
|
|
18
|
-
url: `/open/${encodeURIComponent(filePath)}`,
|
|
19
|
-
params: { newLeaf },
|
|
20
|
-
}, context, "openFile");
|
|
21
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module PatchMethods
|
|
3
|
-
* @description
|
|
4
|
-
* Methods for performing granular PATCH operations within notes via the Obsidian REST API.
|
|
5
|
-
*/
|
|
6
|
-
import { RequestContext } from "../../../utils/index.js";
|
|
7
|
-
import { PatchOptions, Period, RequestFunction } from "../types.js";
|
|
8
|
-
/**
|
|
9
|
-
* Patches a specific file in the vault.
|
|
10
|
-
* @param _request - The internal request function from the service instance.
|
|
11
|
-
* @param filePath - Vault-relative path to the file.
|
|
12
|
-
* @param content - The content to insert/replace (string or JSON for tables/frontmatter).
|
|
13
|
-
* @param options - Patch operation details (operation, targetType, target, etc.).
|
|
14
|
-
* @param context - Request context.
|
|
15
|
-
* @returns {Promise<void>} Resolves on success (200 OK).
|
|
16
|
-
*/
|
|
17
|
-
export declare function patchFile(_request: RequestFunction, filePath: string, content: string | object, // Allow object for JSON content type
|
|
18
|
-
options: PatchOptions, context: RequestContext): Promise<void>;
|
|
19
|
-
/**
|
|
20
|
-
* Patches the currently active file in Obsidian.
|
|
21
|
-
* @param _request - The internal request function from the service instance.
|
|
22
|
-
* @param content - The content to insert/replace.
|
|
23
|
-
* @param options - Patch operation details.
|
|
24
|
-
* @param context - Request context.
|
|
25
|
-
* @returns {Promise<void>} Resolves on success (200 OK).
|
|
26
|
-
*/
|
|
27
|
-
export declare function patchActiveFile(_request: RequestFunction, content: string | object, options: PatchOptions, context: RequestContext): Promise<void>;
|
|
28
|
-
/**
|
|
29
|
-
* Patches a periodic note.
|
|
30
|
-
* @param _request - The internal request function from the service instance.
|
|
31
|
-
* @param period - The period type ('daily', 'weekly', etc.).
|
|
32
|
-
* @param content - The content to insert/replace.
|
|
33
|
-
* @param options - Patch operation details.
|
|
34
|
-
* @param context - Request context.
|
|
35
|
-
* @returns {Promise<void>} Resolves on success (200 OK).
|
|
36
|
-
*/
|
|
37
|
-
export declare function patchPeriodicNote(_request: RequestFunction, period: Period, content: string | object, options: PatchOptions, context: RequestContext): Promise<void>;
|