--- name: generate-sdk-types description: Generates TypeScript type definitions for SDK from Rust tool schemas, ensuring type safety between server and client user-invocable: true --- # Generate SDK Types Skill ## Purpose Generates TypeScript type definitions for the SDK from Rust tool schemas, ensuring type safety between server and client. ## CLAUDE.md Compliance - ✅ Automated type generation (no manual sync) - ✅ Validates type consistency - ✅ Prevents type drift between Rust and TypeScript ## Usage Run this skill: - After adding/modifying MCP tools - After changing tool parameter schemas - Before SDK releases - After protocol changes ## Prerequisites - Bun runtime installed - Pierre server must be runnable - `sdk/` directory with dependencies installed ## Commands ### Standard Type Generation ```bash # 1. Ensure server is running cargo run --bin pierre-mcp-server & SERVER_PID=$! sleep 3 # 2. Generate TypeScript types cd sdk bun run generate-types # 3. Verify types changed git diff src/types.ts # 4. Cleanup kill $SERVER_PID cd .. ``` ### One-Command Generation ```bash # Run from project root (handles server lifecycle) ./scripts/generate-sdk-types.js ``` ### Manual Generation Process ```bash # 1. Start server cargo run --bin pierre-mcp-server & SERVER_PID=$! sleep 3 # 2. Fetch tool schemas via MCP curl -X POST http://localhost:8081/mcp \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"tools/list","id":1}' \ > /tmp/tools.json # 3. Parse and generate types cd sdk node scripts/generate-types.js /tmp/tools.json # 4. Format generated code bun run format # 5. Cleanup kill $SERVER_PID cd .. ``` ## Generated Type Structure ### Tool Definitions ```typescript // Generated from Rust ToolDefinition structs export interface Tool { name: string; description: string; inputSchema: { type: 'object'; properties: Record; required?: string[]; }; } // Example: get_activities tool export interface GetActivitiesParams { start_date?: string; end_date?: string; limit?: number; provider?: 'strava' | 'garmin' | 'fitbit'; } ``` ### Tool Registry ```typescript // All available tools export const TOOLS: Tool[] = [ { name: 'get_activities', description: 'Retrieves fitness activities...', inputSchema: { /* ... */ } }, // ... 35+ tools ]; ``` ## Type Validation ### Pre-Generation Check ```bash # Verify Rust tools compile cargo build --lib # Check tool count rg "^pub const TOOL_" src/protocols/universal/tool_registry.rs --type rust | wc -l ``` ### Post-Generation Validation ```bash # Verify types compile cd sdk bun run build # Run type tests bun test -- test/unit/types.test.ts # Check type coverage bun run type-check cd .. ``` ### Diff Analysis ```bash # Compare generated types with committed version git diff sdk/src/types.ts # Expected changes after adding a tool: # + New tool interface # + New tool definition in TOOLS array # + Updated tool count comment ``` ## Type Generation Workflow ### 1. Add New Tool in Rust ```rust // src/protocols/universal/tool_registry.rs pub const TOOL_MY_NEW_FEATURE: ToolDefinition = ToolDefinition { name: "my_new_feature", description: "Does something useful", input_schema: json!({ "type": "object", "properties": { "param1": { "type": "string" }, "param2": { "type": "number" } }, "required": ["param1"] }), }; ``` ### 2. Register Tool ```rust // src/protocols/universal/mod.rs impl UniversalToolExecutor { pub fn register_tools(&mut self) { self.register(TOOL_MY_NEW_FEATURE, handle_my_new_feature); } } ``` ### 3. Generate TypeScript Types ```bash cd sdk bun run generate-types ``` ### 4. Verify Generated Types ```typescript // sdk/src/types.ts (auto-generated) export interface MyNewFeatureParams { param1: string; param2?: number; } export const TOOL_MY_NEW_FEATURE: Tool = { name: 'my_new_feature', description: 'Does something useful', inputSchema: { /* ... */ } }; ``` ### 5. Commit Changes ```bash git add src/protocols/universal/tool_registry.rs git add sdk/src/types.ts git commit -m "feat: add my_new_feature tool with TypeScript types" ``` ## Success Criteria - ✅ TypeScript types match Rust tool definitions - ✅ All tools have corresponding TypeScript interfaces - ✅ Generated code compiles without errors - ✅ Type tests pass - ✅ No manual type definitions (all auto-generated) - ✅ Git diff shows expected changes only ## Related Files - `scripts/generate-sdk-types.js` - Type generation script - `sdk/src/types.ts` - Generated TypeScript types - `src/protocols/universal/tool_registry.rs` - Rust tool definitions - `sdk/TYPE_GENERATION.md` - Type generation documentation ## Related Skills - `test-mcp-compliance` - MCP protocol validation