/**
* Prompts Index
*
* Central registry for all MCP prompts.
* Single source of truth - no duplication in routes.ts.
*/
import { z, ZodTypeAny } from 'zod';
import { zodToJsonSchema } from 'zod-to-json-schema';
import type { PromptDefinition, PromptMetadata, PromptResult } from './types';
import { templatePrompts } from './templates';
// Re-export types
export type { PromptDefinition, PromptMetadata, PromptResult, PromptMessage } from './types';
/**
* All prompts - single source of truth
* Add your custom prompts by importing and spreading here
*/
export const ALL_PROMPTS: PromptDefinition[] = [
...templatePrompts,
];
/**
* Register all prompts with an MCP server.
*
* @param registerFn The server's prompt method
*/
export function registerAllPrompts(
registerFn: <T extends Record<string, ZodTypeAny>>(
name: string,
description: string,
schema: T,
handler: (args: z.infer<z.ZodObject<T>>) => Promise<PromptResult>
) => void
): void {
for (const prompt of ALL_PROMPTS) {
registerFn(
prompt.name,
prompt.description,
prompt.schema,
prompt.handler
);
}
}
/**
* Get metadata for all prompts.
* Used by admin dashboard for display.
*/
export function getPromptsMetadata(): PromptMetadata[] {
return ALL_PROMPTS.map(prompt => {
// Convert Zod schema to JSON Schema
const zodSchema = z.object(prompt.schema);
const jsonSchema = zodToJsonSchema(zodSchema, { target: 'openApi3' });
return {
name: prompt.name,
description: prompt.description,
inputSchema: jsonSchema as Record<string, unknown>,
};
});
}