Skip to main content
Glama

Letta MCP Server

by oculairmedia
prompts.js3.53 kB
import { createLogger } from '../core/logger.js'; import { ListPromptsRequestSchema, GetPromptRequestSchema, } from '@modelcontextprotocol/sdk/types.js'; const logger = createLogger('prompts'); // Registry to store available prompts export const promptRegistry = new Map(); /** * Register prompt handlers with the MCP server * @param {LettaServer} server - The Letta server instance */ export function registerPromptHandlers(server) { logger.info('Registering prompt handlers'); // Handler for prompts/list server.server.setRequestHandler(ListPromptsRequestSchema, async (request) => { logger.info('Handling prompts/list request', { params: request.params }); try { const prompts = Array.from(promptRegistry.values()); const cursor = request.params?.cursor; const pageSize = 20; // Simple pagination let startIndex = 0; if (cursor) { startIndex = parseInt(cursor, 10) || 0; } const paginatedPrompts = prompts.slice(startIndex, startIndex + pageSize); const hasMore = startIndex + pageSize < prompts.length; return { prompts: paginatedPrompts.map((p) => ({ name: p.name, title: p.title, description: p.description, arguments: p.arguments, })), ...(hasMore && { nextCursor: String(startIndex + pageSize) }), }; } catch (error) { logger.error('Error listing prompts', { error: error.message }); throw error; } }); // Handler for prompts/get server.server.setRequestHandler(GetPromptRequestSchema, async (request) => { logger.info('Handling prompts/get request', { params: request.params }); const { name, arguments: args } = request.params || {}; if (!name) { throw new Error('Missing required parameter: name'); } const prompt = promptRegistry.get(name); if (!prompt) { throw new Error(`Unknown prompt: ${name}`); } try { // Get the prompt messages const messages = await prompt.handler(args || {}); return { description: prompt.description, messages, }; } catch (error) { logger.error('Error getting prompt', { name, error: error.message }); throw error; } }); } /** * Register a new prompt template * @param {Object} prompt - Prompt definition * @param {string} prompt.name - Unique prompt identifier * @param {string} prompt.title - Human-readable title * @param {string} prompt.description - Prompt description * @param {Array} prompt.arguments - Prompt arguments schema * @param {Function} prompt.handler - Function that returns prompt messages */ export function registerPrompt(prompt) { if (!prompt.name || !prompt.handler) { throw new Error('Prompt must have name and handler'); } logger.info('Registering prompt', { name: prompt.name }); promptRegistry.set(prompt.name, prompt); } /** * Emit prompt list changed notification * @param {LettaServer} server - The Letta server instance */ export function notifyPromptsChanged(server) { if (server.server.sendNotification) { server.server.sendNotification({ method: 'notifications/prompts/list_changed', }); } }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/oculairmedia/Letta-MCP-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server