Obsidian MCP REST Server

  • src
import { Server, ServerTransport } from './types'; import { ObsidianAPI } from './obsidian-api'; import { ListNotesTool, ReadNoteTool, WriteNoteTool, SearchNotesTool, GetMetadataTool } from './tools'; export interface ServerConfig { name: string; version: string; obsidian: { apiKey: string; port: number; host: string; }; } export class StdioServerTransport implements ServerTransport { async connect(): Promise<void> { // Implementation for stdin/stdout communication process.stdin.setEncoding('utf8'); process.stdin.on('data', (data) => { // Handle incoming data console.log(data.toString()); }); } } export class ObsidianMCPServer implements Server { public config: { name: string; version: string; }; private api: ObsidianAPI; private tools: Map<string, any>; constructor(config: ServerConfig) { this.config = { name: config.name, version: config.version, }; this.api = new ObsidianAPI(config.obsidian); this.tools = new Map(); this.registerTools(); } private registerTools() { const tools = [ new ListNotesTool(this.api), new ReadNoteTool(this.api), new WriteNoteTool(this.api), new SearchNotesTool(this.api), new GetMetadataTool(this.api) ]; tools.forEach(tool => { this.registerTool(tool); }); } public registerTool(tool: any): void { this.tools.set(tool.getName(), tool); } public async connect(transport: ServerTransport): Promise<void> { await transport.connect(); console.error(`${this.config.name} MCP Server running on stdio`); } public async start() { const transport = new StdioServerTransport(); await this.connect(transport); } }