Type-safe OpenAPI clients with MCP server for AI-driven API exploration
SuFetch combines two powerful tools:
- Type-Safe API Clients - Generate fully-typed TypeScript clients from OpenAPI specifications
- MCP Server - Let AI assistants (like Claude) explore your APIs and generate code
Built with apiful for type-safe OpenAPI clients.
- ✨ Fully Type-Safe - Autocomplete and type checking for all API calls
- 🤖 MCP Integration - AI assistants can explore and generate code for your APIs
- 🔄 Auto-Discovery - Automatic service detection and type generation
- 🛠️ Modern Stack - TypeScript 5.7, ESNext, strict mode
- 🧪 Well-Tested - 76+ tests with >60% coverage
# npm npm install sufetch # pnpm pnpm add sufetch # yarn yarn add sufetch# Install globally npm install -g sufetch # Verify installation sufetch-mcp --versiongit clone https://github.com/productdevbook/sufetch.git cd sufetch pnpm install pnpm buildimport { createClient, cloud } from 'sufetch/hetzner' // Create a typed client const client = createClient({ baseURL: 'https://api.hetzner.cloud/v1', headers: { 'Authorization': 'Bearer your-api-token' } }).with(cloud) // Fully typed requests and responses const servers = await client('/servers', { method: 'GET' // ✅ Type-checked }) // TypeScript knows the response type console.log(servers.servers) // ✅ Autocomplete worksSee Supported APIs for all available services.
Extract specific types from endpoints for maximum type safety:
import type { HetznerCloud } from 'sufetch/hetzner' // Extract request body type type CreateServerBody = HetznerCloud<'/servers', 'post'>['request'] // Extract response type type GetServerResponse = HetznerCloud<'/servers/{id}', 'get'>['response'] // Extract query parameters type ListServersQuery = HetznerCloud<'/servers', 'get'>['query'] // Extract path parameters type ServerPathParams = HetznerCloud<'/servers/{id}', 'get'>['path'] // Use in functions for type safety function processServer(server: GetServerResponse) { console.log(server.server.id) // ✅ Full autocomplete console.log(server.server.name) // ✅ Type-checked } function createServer(body: CreateServerBody) { // TypeScript enforces correct structure return client('/servers', { method: 'POST', body // ✅ Type-safe }) }Available properties:
['request']- Request body type['response']- Success response (200/201)['query']- Query parameters['path']- Path parameters['responses'][status]- Specific status code response
Works with all APIs: HetznerCloud, DigitalOcean, OryKaratos, OryHydra.
See the MCP Server Setup section below.
SuFetch currently includes:
| API | Description | Endpoints | Import |
|---|---|---|---|
| DigitalOcean | Complete cloud platform API | 200+ | sufetch/digitalocean |
| Hetzner Cloud | Cloud infrastructure management | 100+ | sufetch/hetzner |
| Ory Kratos | Identity & user management | 50+ | sufetch/ory |
| Ory Hydra | OAuth 2.0 & OpenID Connect | 40+ | sufetch/ory |
Want to add more? See Adding New APIs.
1. Install (choose one):
npm install -g sufetch # Global npx sufetch-mcp # No install2. Configure:
Claude Desktop (click to expand)
Edit config file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{ "mcpServers": { "sufetch": { "command": "sufetch-mcp" } } }Restart Claude Desktop.
Claude Code CLI (click to expand)
claude mcp add --transport stdio --scope project sufetch -- sufetch-mcpOr create .mcp.json:
{ "mcpServers": { "sufetch": { "command": "sufetch-mcp" } } }3. Test: Ask Claude: "List available APIs using sufetch"
| Tool | Description |
|---|---|
list_apis | List all available APIs |
get_api_info | Get API metadata |
search_endpoints | Search by path/method/description |
get_endpoint_details | Get full endpoint specs |
get_schema_details | Get data schemas |
generate_code_example | Generate TypeScript code |
get_quickstart | Get API quickstart guide |
Click to see how to add your own OpenAPI specs
- Create directory:
mkdir -p openapi-specs/myapi - Add your
myapi.jsonOpenAPI spec - Copy
apiful.config.tsandindex.tsfromopenapi-specs/ory/as template - Run
pnpm build
Done! Your API is now available as sufetch/myapi and in the MCP server.
See CLAUDE.md for detailed instructions.
pnpm install # Install pnpm build # Build pnpm test # Test pnpm lint:fix # LintSee CLAUDE.md for architecture, build pipeline, and contribution guide.
MCP Server not showing?
# Test server works sufetch-mcp # Should output: "SuFetch MCP server running on stdio" # Check config claude mcp list # For Claude Code cat .mcp.json # Check file exists # Restart Claude Desktop (if using Desktop)Build issues?
rm -rf node_modules pnpm-lock.yaml dist pnpm install && pnpm buildStill stuck? Open an issue with your Node version and error message.
Contributions welcome! See CONTRIBUTING.md.
git clone https://github.com/productdevbook/sufetch.git cd sufetch pnpm install && pnpm build # Make changes, run `pnpm test && pnpm lint:fix`- CLAUDE.md - Architecture & development guide
- Model Context Protocol - MCP docs
MIT © 2025