Merge pull request #230 from aaronsb/fix/mcpserver-no-deprecated

refactor(mcp): drop deprecated Server reference via McpServer wrapper
This commit is contained in:
Aaron Bockelie 2026-06-09 11:58:23 -05:00 committed by GitHub
commit 1a4b554b9f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 12 additions and 16 deletions

View file

@ -37,15 +37,6 @@ export default tseslint.config(
"obsidianmd/ui/sentence-case": ["error", { allowAutoFix: true }],
},
},
// MCP SDK's Server class is deprecated in favor of McpServer, but McpServer
// requires Zod schemas for tool registration. This codebase uses raw JSON Schema
// with setRequestHandler, which is only available on the deprecated Server class.
{
files: ["src/mcp-server.ts", "src/utils/mcp-server-pool.ts"],
rules: {
"@typescript-eslint/no-deprecated": "off",
},
},
// builtin-modules is build-tooling only (esbuild.config.mjs), not plugin code.
// js-yaml is used for YAML parsing in Bases API — no built-in alternative exists.
//

View file

@ -3,7 +3,7 @@ import cors from 'cors';
import { App, Notice } from 'obsidian';
import { createServer as createHttpServer, Server } from 'http';
import { Server as HttpsServer } from 'https';
import { Server as MCPServer } from '@modelcontextprotocol/sdk/server/index.js';
import { McpServer as MCPServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
import {
isInitializeRequest

View file

@ -1,4 +1,4 @@
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import {
ListToolsRequestSchema,
CallToolRequestSchema,
@ -35,7 +35,7 @@ interface PluginWithSettings {
}
interface PooledServer {
server: Server;
server: McpServer;
sessionId: string;
createdAt: number;
lastActivityAt: number;
@ -80,7 +80,7 @@ export class MCPServerPool extends EventEmitter {
/**
* Get or create an MCP server for a session
*/
getOrCreateServer(sessionId: string): Server {
getOrCreateServer(sessionId: string): McpServer {
// Check if server exists
let pooledServer = this.servers.get(sessionId);
@ -118,8 +118,12 @@ export class MCPServerPool extends EventEmitter {
/**
* Create a new MCP server instance with handlers
*/
private createNewServer(sessionId: string): Server {
const server = new Server(
private createNewServer(sessionId: string): McpServer {
// Construct via McpServer (the non-deprecated class) and register our
// raw JSON-Schema handlers on its underlying .server — the advanced
// low-level handle it deliberately exposes — so the deprecated Server
// symbol never appears in our source. We don't use registerTool/Zod.
const mcpServer = new McpServer(
{
name: 'Semantic Notes Vault MCP',
version: getVersion()
@ -133,6 +137,7 @@ export class MCPServerPool extends EventEmitter {
...(this.initializeInstructions ? { instructions: this.initializeInstructions } : {})
}
);
const server = mcpServer.server;
// Create session-specific API instance
// Always create SecureObsidianAPI if the main API has security settings
@ -372,7 +377,7 @@ export class MCPServerPool extends EventEmitter {
throw new Error(`Unknown resource: ${uri}`);
});
return server;
return mcpServer;
}
/**