Generate typed TypeScript SDKs for AI agents to interact with MCP servers. Converts JSON-RPC curl commands to clean function calls. Auto-generates types, client methods, and example scripts from MCP tool definitions. Use when building MCP-enabled applications, need typed programmatic access to MCP tools, or creating reusable agent automation scripts.
Installation
Details
Usage
After installing, this skill will be available to your AI coding assistant.
Verify installation:
skills listSkill Instructions
name: ts-agent-sdk description: | Generate typed TypeScript SDKs for AI agents to interact with MCP servers. Converts verbose JSON-RPC curl commands to clean function calls (docs.createDocument() vs curl). Auto-detects MCP tools from server modules, generates TypeScript types and client methods, creates runnable example scripts.
Use when: building MCP-enabled applications, need typed programmatic access to MCP tools, want Claude Code to manage apps via scripts, eliminating manual JSON-RPC curl commands, validating MCP inputs/outputs, or creating reusable agent automation.
ts-agent-sdk
Overview
This skill generates typed TypeScript SDKs that allow AI agents (primarily Claude Code) to interact with web applications via MCP servers. It replaces verbose JSON-RPC curl commands with clean function calls.
Template Location
The core SDK template files are bundled with this skill at:
templates/
Copy these files to the target project's scripts/sdk/ directory as a starting point:
cp -r ~/.claude/skills/ts-agent-sdk/templates/* ./scripts/sdk/
SDK Generation Workflow
Step 1: Detect MCP Servers
Scan the project for MCP server modules:
src/server/modules/mcp*/server.ts
Each server.ts file contains tool definitions using the pattern:
server.tool(
'tool_name',
'Tool description',
zodInputSchema,
async (params) => { ... }
)
Step 2: Extract Tool Definitions
For each tool, extract:
- name: The tool identifier (e.g., 'create_document')
- description: Tool description for JSDoc
- inputSchema: Zod schema defining input parameters
- endpoint: The MCP endpoint path (e.g., '/api/mcp-docs/message')
Step 3: Generate TypeScript Interfaces
Convert Zod schemas to TypeScript interfaces:
// From: z.object({ name: z.string(), email: z.string().email() })
// To:
export interface CreateEnquiryInput {
name: string;
email: string;
}
Step 4: Generate Module Client
Create a client class with methods for each tool:
// scripts/sdk/docs/client.ts
import { MCPClient, defaultClient } from '../client';
import type { CreateDocumentInput, CreateDocumentOutput } from './types';
const ENDPOINT = '/api/mcp-docs/message';
export class DocsClient {
private mcp: MCPClient;
constructor(client?: MCPClient) {
this.mcp = client || defaultClient;
}
async createDocument(input: CreateDocumentInput): Promise<CreateDocumentOutput> {
return this.mcp.callTool(ENDPOINT, 'create_document', input);
}
async listDocuments(input: ListDocumentsInput): Promise<ListDocumentsOutput> {
return this.mcp.callTool(ENDPOINT, 'list_documents', input);
}
// ... one method per tool
}
export const docs = new DocsClient();
Step 5: Generate Example Scripts
Create runnable examples in scripts/sdk/examples/:
#!/usr/bin/env npx tsx
// scripts/sdk/examples/create-doc.ts
import { docs } from '../';
async function main() {
const result = await docs.createDocument({
spaceId: 'wiki',
title: 'Getting Started',
content: '# Welcome\n\nThis is the intro.',
});
console.log(`Created document: ${result.document.id}`);
}
main().catch(console.error);
Step 6: Update Index Exports
Add module exports to scripts/sdk/index.ts:
export { docs } from './docs';
export { enquiries } from './enquiries';
Output Structure
project/
└── scripts/sdk/
├── index.ts # Main exports
├── config.ts # Environment config
├── errors.ts # Error classes
├── client.ts # MCP client
│
├── docs/ # Generated module
│ ├── types.ts # TypeScript interfaces
│ ├── client.ts # Typed methods
│ └── index.ts # Module exports
│
├── enquiries/ # Another module
│ ├── types.ts
│ ├── client.ts
│ └── index.ts
│
└── examples/ # Runnable scripts
├── create-doc.ts
├── list-spaces.ts
└── create-enquiry.ts
Environment Variables
The SDK uses these environment variables:
| Variable | Description | Default |
|---|---|---|
SDK_MODE | Execution mode: 'local', 'remote', 'auto' | 'auto' |
SDK_BASE_URL | Target Worker URL | http://localhost:8787 |
SDK_API_TOKEN | Bearer token for auth | (none) |
Execution
Run generated scripts with:
SDK_API_TOKEN="your-token" SDK_BASE_URL="https://app.workers.dev" npx tsx scripts/sdk/examples/create-doc.ts
Naming Conventions
- Module names: Lowercase, from MCP server name (e.g., 'mcp-docs' → 'docs')
- Method names: camelCase from tool name (e.g., 'create_document' → 'createDocument')
- Type names: PascalCase (e.g., 'CreateDocumentInput', 'CreateDocumentOutput')
Error Handling
The SDK provides typed errors:
AuthError- 401, invalid tokenValidationError- Invalid inputNotFoundError- Resource not foundRateLimitError- 429, too many requestsMCPError- MCP protocol errorsNetworkError- Connection failures
Regeneration
When MCP tools change, regenerate the SDK:
- Re-scan
src/server/modules/mcp*/server.ts - Update types.ts with new/changed schemas
- Update client.ts with new/changed methods
- Preserve any custom code in examples/
More by jezweb
View allSelf-hosted auth for TypeScript/Cloudflare Workers with social auth, 2FA, passkeys, organizations, RBAC, and 15+ plugins. Requires Drizzle ORM or Kysely for D1 (no direct adapter). Self-hosted alternative to Clerk/Auth.js. Use when: self-hosting auth on D1, building OAuth provider, multi-tenant SaaS, or troubleshooting D1 adapter errors, session caching, rate limits.
/review-skill - Skill Audit Command: Comprehensive skill documentation audit with automated checks and manual review phases.
Build rich text editors with Tiptap - headless editor framework with React and Tailwind v4. Covers SSR-safe setup, image uploads, prose styling, and collaborative editing. Use when creating blog editors, comment systems, or Notion-like apps, or troubleshooting SSR hydration errors, typography issues, or image upload problems.
Run LLMs and AI models on Cloudflare's GPU network with Workers AI. Includes Llama 4, Gemma 3, Mistral 3.1, Flux images, BGE embeddings, streaming, and AI Gateway. Handles 2025 breaking changes. Use when: implementing LLM inference, images, RAG, or troubleshooting AI_ERROR, rate limits, max_tokens, BGE pooling.
