Skip to main content
Glama

ultra-session

Manage conversation sessions to maintain persistent context and memory across AI interactions, enabling continuity in multi-turn dialogues.

Instructions

Manage conversation sessions for persistent context and memory

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
actionYesAction to perform
sessionIdNoSession ID (required for get, archive, delete actions)
nameNoSession name (optional for create action)
statusNoSession status filter for list action (default: active)

Implementation Reference

  • Core handler function that implements the ultra-session tool logic, handling create, list, get, archive, and delete actions for conversation sessions using conversationMemory.
    export async function handleSession(args: any) { const { action, sessionId, name, status = 'active' } = args; switch (action) { case 'create': { const session = await conversationMemory.getOrCreateSession(sessionId, name); return { content: [ { type: 'text', text: `## Session Created\n\nID: ${session.id}\nName: ${session.name || 'Unnamed'}\nStatus: ${session.status}\nCreated: ${session.createdAt}` } ] }; } case 'list': { const sessionsResult = await conversationMemory.listSessions(status, 20); const sessionList = sessionsResult.sessions.map((s: any) => `- **${s.name || s.id}** (${s.id})\n Messages: ${s.messageCount}, Files: ${s.fileCount}, Tokens: ${s.totalTokens}, Cost: $${s.totalCost.toFixed(4)}\n Last Activity: ${s.lastActivity.toISOString()}` ).join('\n\n'); return { content: [ { type: 'text', text: `## Sessions (${status})\n\n${sessionList || 'No sessions found.'}` } ] }; } case 'get': { if (!sessionId) throw new Error('Session ID required for get action'); const context = await conversationMemory.getConversationContext(sessionId, undefined, true); return { content: [ { type: 'text', text: `## Session Details\n\nID: ${sessionId}\nMessages: ${context.messages.length}\nFiles: ${context.files.length}\nTotal Tokens: ${context.totalTokens}\nTotal Cost: $${context.totalCost.toFixed(4)}\n\nBudget:\n- Max Tokens: ${context.budget?.maxTokens || 'None'}\n- Max Cost: $${context.budget?.maxCostUsd || 'None'}\n- Used Tokens: ${context.budget?.usedTokens || 0}\n- Used Cost: $${context.budget?.usedCostUsd || 0}` } ] }; } case 'archive': case 'delete': { if (!sessionId) throw new Error(`Session ID required for ${action} action`); await conversationMemory.updateSessionStatus(sessionId, action === 'archive' ? 'archived' : 'deleted'); return { content: [ { type: 'text', text: `## Session ${action === 'archive' ? 'Archived' : 'Deleted'}\n\nSession ${sessionId} has been ${action === 'archive' ? 'archived' : 'deleted'}.` } ] }; } default: throw new Error(`Unknown action: ${action}`); } }
  • Zod schema defining the input parameters for the ultra-session tool: action, sessionId, name, status.
    const ZenSessionSchema = z.object({ action: z.enum(["create", "list", "get", "archive", "delete"]).describe("Action to perform"), sessionId: z.string().optional().describe("Session ID (required for get, archive, delete actions)"), name: z.string().optional().describe("Session name (optional for create action)"), status: z.enum(["active", "archived", "deleted"]).optional().describe("Session status filter for list action (default: active)"), });
  • src/server.ts:986-992 (registration)
    Registers the ultra-session tool with MCP server, providing title, description, input schema, and handler function.
    server.registerTool("ultra-session", { title: "Zen Session", description: "Manage conversation sessions for persistent context and memory", inputSchema: ZenSessionSchema.shape, }, async (args) => { return await handleSession(args) as any; });

Latest Blog Posts

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/RealMikeChong/ultra-mcp'

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