Skip to content

Type-safe OpenAPI clients with MCP server for AI-driven API exploration

License

Notifications You must be signed in to change notification settings

productdevbook/sufetch

Β 
Β 

Repository files navigation

SuFetch banner

SuFetch

Version Downloads License TypeScript MCP Server

Type-safe OpenAPI clients with MCP server for AI-driven API exploration

Table of Contents


What is SuFetch?

SuFetch combines two powerful tools:

  1. Type-Safe API Clients - Generate fully-typed TypeScript clients from OpenAPI specifications
  2. MCP Server - Let AI assistants (like Claude) explore your APIs and generate code

Built with apiful for type-safe OpenAPI clients.

Features

  • ✨ 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

Installation

For Using the API Client

# npm
npm install sufetch

# pnpm
pnpm add sufetch

# yarn
yarn add sufetch

For MCP Server (Global)

# Install globally
npm install -g sufetch

# Verify installation
sufetch-mcp --version

For Development

git clone https://github.com/productdevbook/sufetch.git
cd sufetch
pnpm install
pnpm build

Quick Start

Using the Type-Safe API Client

import { 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 works

See Supported APIs for all available services.

Type Helpers for Advanced Type Safety

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.

Using with AI Assistants (MCP)

See the MCP Server Setup section below.

Supported APIs

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.

MCP Server Setup

Quick Setup

1. Install (choose one):

npm install -g sufetch  # Global
npx sufetch-mcp         # No install

2. 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-mcp

Or create .mcp.json:

{
  "mcpServers": {
    "sufetch": {
      "command": "sufetch-mcp"
    }
  }
}

3. Test: Ask Claude: "List available APIs using sufetch"

Available MCP Tools

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

Adding New APIs

Click to see how to add your own OpenAPI specs
  1. Create directory: mkdir -p openapi-specs/myapi
  2. Add your myapi.json OpenAPI spec
  3. Copy apiful.config.ts and index.ts from openapi-specs/ory/ as template
  4. Run pnpm build

Done! Your API is now available as sufetch/myapi and in the MCP server.

See CLAUDE.md for detailed instructions.

Development

pnpm install  # Install
pnpm build    # Build
pnpm test     # Test
pnpm lint:fix # Lint

See CLAUDE.md for architecture, build pipeline, and contribution guide.

Troubleshooting

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 build

Still stuck? Open an issue with your Node version and error message.

Contributing

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`

Links

License

MIT Β© 2025


Built with apiful Β· MCP

About

Type-safe OpenAPI clients with MCP server for AI-driven API exploration

Topics

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published

Contributors 2

  •  
  •