swaggbot
by TechBloom-ai
README.md
# Swaggbot
[](https://opensource.org/licenses/MIT)
[](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)
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues