preview_cleanup
Preview empty and invalid API key sessions for cleanup in Claude Code conversations. Filter by project name to identify sessions requiring removal.
Instructions
Preview sessions that would be cleaned (empty and invalid API key sessions)
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| project_name | No | Optional: filter by project name |
Implementation Reference
- src/lib/session.ts:175-200 (handler)The core handler function for the preview_cleanup tool. It lists projects (optionally filtered), scans sessions for empty ones (messageCount === 0) and invalid API key sessions, and returns per-project results with lists of such sessions.export const previewCleanup = (projectName?: string) => Effect.gen(function* () { const projects = yield* listProjects const targetProjects = projectName ? projects.filter((p) => p.name === projectName) : projects const results = yield* Effect.all( targetProjects.map((project) => Effect.gen(function* () { const sessions = yield* listSessions(project.name) const emptySessions = sessions.filter((s) => s.messageCount === 0) const invalidSessions = sessions.filter( (s) => s.title?.includes('Invalid API key') || s.title?.includes('API key') ) return { project: project.name, emptySessions, invalidSessions, } }) ), { concurrency: 5 } ) return results })
- src/mcp/index.ts:92-103 (registration)Registers the 'preview_cleanup' tool in the MCP server, including input schema (optional project_name string) and delegates execution to session.previewCleanup.server.tool( 'preview_cleanup', 'Preview sessions that would be cleaned (empty and invalid API key sessions)', { project_name: z.string().optional().describe('Optional: filter by project name'), }, async ({ project_name }) => { const result = await Effect.runPromise(session.previewCleanup(project_name)) return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }], } }
- src/mcp/index.ts:96-97 (schema)Zod input schema for the preview_cleanup tool: optional project_name string.project_name: z.string().optional().describe('Optional: filter by project name'), },