Glif

Official
import { z } from "zod"; import { CallToolRequestSchema } from "@modelcontextprotocol/sdk/types.js"; import { getMyUserInfo, getMyGlifs, getMyRecentRuns } from "../api.js"; import { formatOutput } from "../utils.js"; import type { ToolResponse } from "./index.js"; type CallToolRequest = z.infer<typeof CallToolRequestSchema>; export const schema = z.object({}); export const definition = { name: "my_glif_user_info", description: "Get detailed information about your user account, recent glifs, and recent runs", inputSchema: { type: "object", properties: {}, required: [], }, }; export async function handler(request: CallToolRequest): Promise<ToolResponse> { const [user, glifs, recentRuns] = await Promise.all([ getMyUserInfo(), getMyGlifs(), getMyRecentRuns(), ]); const details = [ "User Information:", `ID: ${user.id}`, `Name: ${user.name}`, `Username: ${user.username}`, `Image: ${user.image}`, user.bio ? `Bio: ${user.bio}` : null, user.website ? `Website: ${user.website}` : null, user.location ? `Location: ${user.location}` : null, `Staff: ${user.staff ? "Yes" : "No"}`, `Subscriber: ${user.isSubscriber ? "Yes" : "No"}`, "", "Your Recent Glifs:", ...glifs .slice(0, 5) .map( (glif) => `- ${glif.name} (${glif.id})\n Created: ${new Date( glif.createdAt ).toLocaleString()}\n Runs: ${glif.completedSpellRunCount}` ), "", "Your Recent Runs:", ...recentRuns .slice(0, 5) .map( (run) => `- ${run.spell.name}\n Time: ${new Date( run.createdAt ).toLocaleString()}\n Duration: ${run.totalDuration}ms\n Output: ${ run.output ? formatOutput(run.outputType ?? "TEXT", run.output) : "No output" }` ), ].filter(Boolean); return { content: [ { type: "text", text: details.join("\n"), }, ], }; }