fix(palace): wire palace MCP tools into register-note-tools registry

This commit is contained in:
saravanakumardb1 2026-04-10 01:41:28 -07:00
parent 97662d1dc0
commit 1ae35a7e21
2 changed files with 24 additions and 6 deletions

View File

@ -29,26 +29,39 @@ const { executableToolsMock, toolNames } = vi.hoisted(() => ({
vi.mock('./note-tools.js', () => ({ vi.mock('./note-tools.js', () => ({
NotesExecutableMcpTools: executableToolsMock, NotesExecutableMcpTools: executableToolsMock,
})); }));
vi.mock('./palace-tools.js', () => ({
PalaceMcpToolDefinitions: [
{
name: 'notes.mempalace.search',
description: 'Search palace',
requiredRole: 'viewer' as const,
inputSchema: { safeParse: vi.fn() },
execute: vi.fn(async () => []),
readOnly: true,
},
],
}));
import { getNotesMcpToolsForRegistration, registerNotesMcpTools } from './register-note-tools.js'; import { getNotesMcpToolsForRegistration, registerNotesMcpTools } from './register-note-tools.js';
describe('register note tools adapter', () => { describe('register note tools adapter', () => {
it('returns a registration-friendly tool list', () => { it('returns a registration-friendly tool list including palace tools', () => {
const tools = getNotesMcpToolsForRegistration(); const tools = getNotesMcpToolsForRegistration();
expect(tools).toHaveLength(2); expect(tools).toHaveLength(3);
expect(tools.map(tool => tool.name)).toEqual([ expect(tools.map(tool => tool.name)).toEqual([
toolNames.list, toolNames.list,
toolNames.createDraft, toolNames.createDraft,
'notes.mempalace.search',
]); ]);
}); });
it('registers every executable tool through the provided callback', () => { it('registers every executable tool (notes + palace) through the provided callback', () => {
const registerTool = vi.fn(); const registerTool = vi.fn();
registerNotesMcpTools(registerTool); registerNotesMcpTools(registerTool);
expect(registerTool).toHaveBeenCalledTimes(2); expect(registerTool).toHaveBeenCalledTimes(3);
expect(registerTool).toHaveBeenNthCalledWith( expect(registerTool).toHaveBeenNthCalledWith(
1, 1,
expect.objectContaining({ name: toolNames.list, requiredRole: 'viewer' }) expect.objectContaining({ name: toolNames.list, requiredRole: 'viewer' })
@ -57,5 +70,9 @@ describe('register note tools adapter', () => {
2, 2,
expect.objectContaining({ name: toolNames.createDraft, requiredRole: 'admin' }) expect.objectContaining({ name: toolNames.createDraft, requiredRole: 'admin' })
); );
expect(registerTool).toHaveBeenNthCalledWith(
3,
expect.objectContaining({ name: 'notes.mempalace.search', requiredRole: 'viewer' })
);
}); });
}); });

View File

@ -1,5 +1,6 @@
import type { ZodTypeAny } from 'zod'; import type { ZodTypeAny } from 'zod';
import { NotesExecutableMcpTools } from './note-tools.js'; import { NotesExecutableMcpTools } from './note-tools.js';
import { PalaceMcpToolDefinitions } from './palace-tools.js';
export interface RegisterableMcpTool<TInput = unknown> { export interface RegisterableMcpTool<TInput = unknown> {
name: string; name: string;
@ -12,7 +13,7 @@ export interface RegisterableMcpTool<TInput = unknown> {
export type RegisterToolFn = (tool: RegisterableMcpTool) => void; export type RegisterToolFn = (tool: RegisterableMcpTool) => void;
export function registerNotesMcpTools(registerTool: RegisterToolFn): void { export function registerNotesMcpTools(registerTool: RegisterToolFn): void {
for (const tool of NotesExecutableMcpTools) { for (const tool of [...NotesExecutableMcpTools, ...PalaceMcpToolDefinitions]) {
registerTool({ registerTool({
name: tool.name, name: tool.name,
description: tool.description, description: tool.description,
@ -24,7 +25,7 @@ export function registerNotesMcpTools(registerTool: RegisterToolFn): void {
} }
export function getNotesMcpToolsForRegistration(): RegisterableMcpTool[] { export function getNotesMcpToolsForRegistration(): RegisterableMcpTool[] {
return NotesExecutableMcpTools.map(tool => ({ return [...NotesExecutableMcpTools, ...PalaceMcpToolDefinitions].map(tool => ({
name: tool.name, name: tool.name,
description: tool.description, description: tool.description,
requiredRole: tool.requiredRole, requiredRole: tool.requiredRole,