/mcp-client-gen

Turn any MCP server into a type-safe TypeScript SDK in seconds - with OAuth 2.1 and multi-provider support

Primary LanguageTypeScriptMIT LicenseMIT

MCP Client Generator

๐Ÿš€ Generate type-safe TypeScript clients from any MCP (Model Context Protocol) server.

import { notion, github, slack } from "./src/mcp-client";

// Type-safe client calls with full IntelliSense
const page = await notion.createPage({
  title: "Meeting Notes",
  content: "Discussion about Q4 roadmap...",
});

const issue = await github.createIssue({
  title: "Bug: Login failure",
  body: "Users cannot authenticate...",
});

await slack.notify({
  channel: "#dev",
  message: `New issue created: ${issue.url}`,
});

Features

โœจ Type-Safe - Full TypeScript support with generated types
๐Ÿ”„ Multi-Provider - Connect to multiple MCP servers simultaneously
๐ŸŽฏ Tree-Shakable - Only bundle the methods you use
โšก Fast - Built with Bun for optimal performance
๐Ÿ› ๏ธ Interactive CLI - Smart prompts with sensible defaults
โš™๏ธ Flexible - Works with multiple MCP config formats

Installation

npm install -g mcp-client-gen
# or use directly
npx mcp-client-gen

Quick Start

1. Configure MCP Servers

Create a .mcp.json file with your MCP server endpoints:

{
  "mcpServers": {
    "notion": {
      "type": "http",
      "url": "https://mcp.notion.com/mcp",
    },
    "github": {
      "type": "http",
      "url": "https://api.githubcopilot.com/mcp/",
    },
  },
}

2. Generate Client SDK

Interactive Mode (Recommended):

npx mcp-client-gen    # Launch interactive prompts
npx mcp-client-gen -y # Accept all defaults and proceed

Direct Mode:

npx mcp-client-gen ./src/mcp-client.ts

3. Use the Generated Client

import { notion } from "./src/mcp-client";

// All methods are fully typed based on the MCP server schema
const page = await notion.fetchPage("page-id");
const newPage = await notion.createPage({
  title: "My Page",
  content: "Page content...",
});

CLI Reference

Interactive Mode

npx mcp-client-gen              # Launch interactive prompts
npx mcp-client-gen -y           # Accept defaults and proceed
npx mcp-client-gen --yes        # Same as -y

Direct Mode

npx mcp-client-gen [options] <output-file>

Arguments:
  output-file          Path for the generated client file

Options:
  --config <file>      MCP configuration file (default: auto-discover)
  -y, --yes            Accept all defaults and skip prompts
  --help              Show help information

Examples:
  npx mcp-client-gen                           # Interactive mode
  npx mcp-client-gen -y                        # Quick generation with defaults
  npx mcp-client-gen ./src/mcp-client.ts       # Direct mode with output file
  npx mcp-client-gen --config custom.json ./src/clients.ts

Use Cases

๐Ÿ”— API Integration - Connect to multiple services with one SDK
๐Ÿค– Workflow Automation - Build cross-platform automation scripts
๐Ÿ“Š Data Synchronization - Keep data in sync across different platforms
๐Ÿงช Rapid Prototyping - Quickly test integrations with type safety

Development Status

Preview Release - This is an early preview. The core CLI and configuration parsing works, but MCP server introspection is still in development.

Current Status:

  • โœ… CLI interface and configuration parsing
  • โœ… Interactive prompts with smart defaults
  • โœ… Multi-server client generation structure
  • โœ… Multiple MCP config format support (.mcp.json, .cursor/, .vscode/)
  • ๐Ÿšง MCP server schema introspection (in progress)
  • ๐Ÿšง Real-time type generation from server capabilities
  • ๐Ÿ“‹ Plugin system for custom transformations

Coming Soon:

  • Full MCP protocol implementation
  • Authentication handling
  • Streaming support
  • Error handling and retries

Authentication

Generated MCP clients include built-in support for OAuth 2.1 authentication using RFC 7591 Dynamic Client Registration. The authentication flow is handled automatically:

OAuth 2.1 Support

  • Dynamic Client Registration (RFC 7591) - Clients automatically register with OAuth providers
  • PKCE Flow (RFC 7636) - Secure authorization code exchange with Proof Key for Code Exchange
  • Multiple Auth Methods - Supports client_secret_basic, client_secret_post, and public clients
  • Token Management - Automatic token refresh and credential storage
  • Resource Protection - RFC 9728 OAuth 2.0 Protected Resource Metadata support

Authentication Flow

  1. Discovery - Client discovers OAuth authorization server metadata
  2. Registration - Dynamic client registration if credentials not found
  3. Authorization - PKCE-based authorization code flow initiation
  4. Token Exchange - Secure token exchange with automatic refresh
  5. API Calls - Authenticated requests using Bearer tokens

Configuration

Authentication is configured per MCP server in your .mcp.json:

{
  "mcpServers": {
    "secured-service": {
      "type": "http",
      "url": "https://api.example.com/mcp",
      "auth": {
        "type": "oauth",
        "clientId": "your-client-id", // Optional for dynamic registration
        "scopes": ["read", "write"],
      },
    },
  },
}

Support & License

If this tool helps you build amazing integrations, consider sponsoring the project to support continued development. ๐Ÿ’–


MIT Licensed โ€ข Feel free to use this in your commercial projects, contribute back, or fork it entirely. Code should be free! ๐Ÿ”“

Built with โค๏ธ by Konstantin Tarkus and contributors.