Type-safe OpenAPI clients with MCP server for AI-driven API exploration
- Features Β· Installation Β· Quick Start
- MCP Server Setup Β· Supported APIs
- Development Β· Contributing
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