Skip to main content
Glama
README.md
# Swaggbot

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![GitHub Stars](https://img.shields.io/github/stars/techbloom-ai/swaggbot?style=social)](https://github.com/techbloom-ai/swaggbot)

> Transform Swagger/OpenAPI docs into conversational interfaces. Self-hosted, local-first, AI-powered API exploration.

---

## Quick Start

```bash
# Docker (recommended)
git clone https://github.com/techbloom-ai/swaggbot.git
cd swaggbot && cp .env.example .env
# Generate SESSION_SECRET and add LLM API keys
docker-compose up -d
```

Open [http://localhost:3003](http://localhost:3003)

---

## What is Swaggbot?

Swaggbot converts any Swagger/OpenAPI documented API into a conversational interface. Built for developers who want to:

- **Explore APIs naturally** β€” Chat instead of reading raw JSON
- **Automate workflows** β€” Multi-step operations with data extraction
- **Stay in control** β€” Self-hosted, data stays local
- **Integrate anywhere** β€” Web UI, MCP server, or direct API

---

## Features

- πŸ€– **Natural Language API Interaction** β€” "List all users" β†’ `GET /users`
- πŸ”„ **Workflow Automation** β€” Chain multiple API calls with dependency resolution
- πŸ”Œ **MCP Server** β€” Use with Claude Desktop, Cursor, Windsurf
- 🏠 **Self-Hosted** β€” Your data, your infrastructure
- πŸ” **Session Management** β€” Encrypted auth tokens, per-session isolation
- 🌐 **Multi-Provider LLM** β€” Moonshot, OpenAI, Anthropic, Ollama
- πŸ“Š **Array Filtering** β€” `[name=John].id` syntax for data extraction
- πŸ›‘οΈ **Security** β€” CSP headers, rate limiting, encrypted storage

---

## Architecture

```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Web UI  β”‚  β”‚  MCP    β”‚  β”‚  API    β”‚
β”‚ Next.js β”‚  β”‚ Server  β”‚  β”‚ Clients β”‚
β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜
     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   β–Ό
          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
          β”‚  Chat Service   β”‚  Intent Classification
          β”‚  + LLM Provider β”‚  β†’ Curl Generation β†’ Execution
          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   β”‚
     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
     β–Ό             β–Ό             β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚SQLite  β”‚   β”‚Workflow β”‚   β”‚ Target   β”‚
β”‚(Local) β”‚   β”‚ Engine  β”‚   β”‚   API    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

---

## Installation

### Prerequisites

- Node.js 18+ **or** Docker
- LLM API key (Moonshot, OpenAI, Anthropic, or Ollama)

### Docker (Recommended)

```bash
# 1. Clone and configure
git clone https://github.com/techbloom-ai/swaggbot.git
cd swaggbot
cp .env.example .env

# 2. Set SESSION_SECRET (required for auth)
# Linux/macOS:
export SESSION_SECRET=$(openssl rand -base64 32)
# Or add to .env: SESSION_SECRET=your_random_secret_here

# 3. Add your LLM API key to .env
# MOONSHOT_API_KEY=your_key_here

# 4. Start
docker-compose up -d
```

**Database migrations run automatically** on first startup.

### Local Development

```bash
git clone https://github.com/techbloom-ai/swaggbot.git
cd swaggbot
pnpm install
cp .env.example .env.local
# Edit .env.local with SESSION_SECRET and LLM API keys
pnpm db:migrate
pnpm dev
```

---

## Configuration

| Variable | Required | Default | Description |
|----------|----------|---------|-------------|
| `SESSION_SECRET` | **Yes** | β€” | Random secret for session encryption (min 32 chars) |
| `MOONSHOT_API_KEY` | Yes* | β€” | Moonshot AI API key |
| `OPENAI_API_KEY` | Yes* | β€” | OpenAI API key |
| `ANTHROPIC_API_KEY` | Yes* | β€” | Anthropic API key |
| `OLLAMA_BASE_URL` | Yes* | β€” | Ollama server URL |
| `LLM_PROVIDER` | No | `moonshot` | `moonshot` \| `openai` \| `anthropic` \| `ollama` |
| `DATABASE_URL` | No | `file:./data/swaggbot.db` | SQLite database path |
| `NEXT_PUBLIC_APP_URL` | No | `http://localhost:3003` | App base URL |

\*At least one LLM provider required

### Generate SESSION_SECRET

```bash
# Linux/macOS
openssl rand -base64 32

# Or any random string (min 32 characters)
```

---

## API Reference

### REST API

All endpoints require authentication via session cookie.

| Endpoint | Method | Description |
|----------|--------|-------------|
| `/api/auth/login` | POST | Authenticate and create session |
| `/api/session` | POST | Create API session from Swagger URL |
| `/api/session` | GET | List all sessions (paginated) |
| `/api/chat` | POST | Send message to API |
| `/api/workflow` | POST | Create multi-step workflow |
| `/api/workflow/:id/execute` | POST | Execute workflow |

### MCP Server

```json
{
  "mcpServers": {
    "swaggbot": {
      "command": "docker",
      "args": ["compose", "run", "--rm", "swaggbot-mcp"],
      "env": {
        "SESSION_SECRET": "your_secret",
        "MOONSHOT_API_KEY": "your_key"
      }
    }
  }
}
```

---

## Usage Examples

### Web UI

1. Navigate to login page
2. Create a session with your Swagger URL
3. Start chatting:
   ```
   "Create a user named John"
   "List all pets with status available"
   "Execute the login workflow"
   ```

### API

```bash
# Authenticate
curl -X POST http://localhost:3003/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"password": "your_password"}' \
  -c cookies.txt

# Chat with API
curl -X POST http://localhost:3003/api/chat \
  -H "Content-Type: application/json" \
  -b cookies.txt \
  -d '{"sessionId": "...", "message": "List all users"}'
```

---

## Technology Stack

| Component | Technology |
|-----------|------------|
| Framework | Next.js 16 (App Router) |
| Language | TypeScript 5 |
| Database | SQLite (libSQL/Turso) |
| ORM | Drizzle ORM |
| UI | shadcn/ui + TailwindCSS 4 |
| State | Zustand |
| LLM SDK | Vercel AI SDK patterns |
| MCP | Model Context Protocol SDK |
| Testing | Vitest |
| Container | Docker + Docker Compose |

---

## Project Structure

```
swaggbot/
β”œβ”€β”€ app/                 # Next.js App Router
β”‚   β”œβ”€β”€ api/            # API routes
β”‚   β”œβ”€β”€ sessions/       # Session UI
β”‚   └── settings/       # Settings page
β”œβ”€β”€ components/         # shadcn/ui components
β”œβ”€β”€ lib/
β”‚   β”œβ”€β”€ db/            # Database schema & migrations
β”‚   β”œβ”€β”€ llm/           # LLM provider implementations
β”‚   β”œβ”€β”€ services/      # Business logic
β”‚   β”œβ”€β”€ auth/          # Session & encryption
β”‚   └── prompts/       # LLM prompt management
β”œβ”€β”€ scripts/           # MCP server & entrypoint
└── data/              # SQLite storage (Docker volume)
```

---

## Security

- **Local-first**: All data stored locally in SQLite
- **Encrypted tokens**: Auth tokens encrypted with AES-256-GCM
- **Session-based auth**: Password-protected access
- **CSP headers**: Content Security Policy protection
- **Rate limiting**: Per-endpoint limits configurable
- **No telemetry**: Zero analytics or tracking

---

## License

MIT Β© [TechBloom](LICENSE)

Maintenance

ActivityInactive
ResponsivenessNo issues