@dotdo/sdk
v0.1.1
Published
Define your API once, get a typed client, CLI binary, and MCP server
Readme
@dotdo/sdk
A meta-framework that simplifies the process of creating and publishing an SDK with CLI and MCP. Define your API once, get a typed client, CLI binary, and MCP server - all publishable to npm.
Installation
npm install @dotdo/sdkQuick Start
1. Create a new SDK project
npx sdk.do init my-api
cd my-api
npm install2. Define your API in sdk.config.ts
import { defineSDK } from '@dotdo/sdk'
export default defineSDK({
name: 'my-api',
baseUrl: 'https://api.example.com',
api: {
users: {
list: {
input: { limit: 'number?', offset: 'number?' },
output: 'User[]',
description: 'List all users',
},
get: {
input: { id: 'string' },
output: 'User',
description: 'Get a user by ID',
},
},
},
types: {
User: {
id: 'string',
name: 'string',
email: 'string',
},
},
})3. Generate packages
npx sdk.do generateThis creates four packages in generated/:
types/- Shared TypeScript type definitionsclient/- Typed SDK clientcli/- CLI binary with subcommandsmcp/- MCP server with tools
4. Build and publish
npx sdk.do build
npx sdk.do publishAPI Definition
Type Strings
Use shorthand type strings for API definitions:
| Type | Meaning |
|------|---------|
| 'string' | string |
| 'number' | number |
| 'boolean' | boolean |
| 'object' | Record<string, unknown> |
| 'string?' | optional string |
| 'User[]' | array of User |
| 'User[]?' | optional array of User |
Authentication
defineSDK({
// ...
auth: {
type: 'api-key', // or 'oauth2', 'bearer'
headerName: 'X-API-Key',
},
})CLI Commands
sdk.do init [name] # Scaffold new SDK project
sdk.do generate # Generate client/CLI/MCP from sdk.config.ts
sdk.do dev # Watch mode - regenerate on config changes
sdk.do build # Build all generated packages
sdk.do version [bump] # Bump version (patch/minor/major)
sdk.do publish # Build and publish all packages to npm
sdk.do login # Authenticate with npmGenerated Output
Client Package
import { createClient } from '@my-api/client'
const client = createClient({ apiKey: 'your-key' })
const users = await client.users.list({ limit: 10 })
const user = await client.users.get({ id: '123' })CLI Package
my-api users list --limit 10
my-api users get --id 123MCP Package
The MCP server exposes your API as tools:
users_list- List all usersusers_get- Get a user by ID
Exports
import { defineSDK } from '@dotdo/sdk'
import { createClient } from '@dotdo/sdk/client'
import { createCLI } from '@dotdo/sdk/cli'
import { sdkToMCPTools } from '@dotdo/sdk/mcp'
import { generate } from '@dotdo/sdk/generate'License
MIT
