llm-toolkit
MCP server toolkit with payload library, WAF bypass generator, rate limiter, plugin system, and inter-MCP bridge for security testing.
README
llm-toolkit
MCP server toolkit with payload library, WAF bypass generator, rate limiter, plugin system, and inter-MCP bridge for security testing.
Disclaimer: For authorized security testing only. Obtain written permission before testing any system you do not own. Unauthorized access is illegal.
Features
Payload Library
80+ curated payloads across 8 vulnerability categories:
| Category | File | Description |
|---|---|---|
| XSS | payloads/xss.json |
Cross-site scripting vectors |
| SQLi | payloads/sqli.json |
SQL injection payloads |
| SSRF | payloads/ssrf.json |
Server-side request forgery |
| SSTI | payloads/ssti.json |
Server-side template injection |
| LFI | payloads/lfi.json |
Local file inclusion |
| XXE | payloads/xxe.json |
XML external entity injection |
| CMDi | payloads/cmdi.json |
Command injection |
| NoSQLi | payloads/nosqli.json |
NoSQL injection |
Each payload entry includes metadata: id, name, payload, category, context, riskLevel, optional description, and tags.
WAF Bypass Engine
Generates WAF-specific bypass variants with strategy tables per provider:
| WAF | Techniques |
|---|---|
| Cloudflare | Unicode normalization, HTTP parameter pollution, JSON nesting, case alternation, whitespace alternatives |
| ModSecurity | MySQL version comments (/*!50000...*/), case alternation, null byte injection, whitespace alternatives, generic comment insertion |
| AWS WAF | Encoding chains (URL + Base64), regex evasion with character classes, deep JSON nesting, Unicode fullwidth, token breaker |
| Generic | Case mutation, whitespace mutation, comment injection, URL/hex/base64/HTML entity encoding, token breaker, Unicode mutation |
Also includes payload type detection (XSS, SQLi, SSTI, XXE, SSRF, LFI, CMDi, NoSQLi) and bypass strategy suggestions.
Payload Generator
Six mutation types that can be applied individually or chained:
| Mutation | Description |
|---|---|
caseMutation |
Random case alternation per character |
whitespaceMutation |
Replace spaces with %09, %0a, %0b, %0c, %0d, %a0 |
commentMutation |
Insert SQL comments between characters (/**/) or MySQL style (/*!50000...*/) |
encodingMutation |
URL, hex, Base64, or HTML entity encoding |
tokenBreaker |
Split keywords at random positions with encoded delimiters |
unicodeMutation |
Fullwidth Unicode character substitution |
Rate Limiter
Token bucket implementation with configurable limits. Defaults to 20 requests per minute per client. Applied before every MCP tool execution.
Plugin System
Dynamic plugin loading from ~/.llm-toolkit/plugins.json. Plugins can register custom MCP tools, extend payload generation, or add new WAF strategies.
Inter-MCP Bridge
Connect to other MCP servers via stdio or in-memory transport. Call remote tools, list available tools, and disconnect. Enables chaining multiple MCP servers into a single workflow.
Content Attachments
Link reference materials (articles, videos, PDFs, tweets) to vulnerability techniques. Validates URLs are reachable and fetches content for context.
CLI Installer
Install and manage security testing tools:
| Tool | Category | Description |
|---|---|---|
nuclei |
Scanner | Fast vulnerability scanner based on templates |
subfinder |
Recon | Subdomain discovery tool |
httpx |
Recon | Fast HTTP toolkit |
ffuf |
Fuzzing | Fast web fuzzer |
katana |
Recon | Next-gen crawling and spidering |
Auto-detects OS (macOS via Homebrew, Linux via Go install) and installs the correct package.
Quick Start
Prerequisites
- Node.js 20+
- npm
Install
npm install
Development
npm run dev # tsup watch mode
npm run typecheck # TypeScript type checking (strict mode)
Build
npm run build # tsup ESM output to dist/
Test
npm test # vitest run (48 tests)
npm run test:watch # vitest watch mode
npm run test:coverage # with coverage
OpenCode Integration
Automated Setup (Recommended)
No manual config editing needed. Run one of these commands:
# Development mode — uses tsx to run source directly
npm run setup:opencode
# Production mode — uses compiled dist/index.js
npm run setup:opencode:prod
The script:
- Resolves the absolute path to this project
- Reads (or creates)
~/.config/opencode/opencode.json - Adds/updates the
llm-toolkitMCP entry automatically - Prints the resulting config block for verification
After setup, restart OpenCode. Tools will appear as llm-toolkit-{tool-name} — for example: llm-toolkit-get-payloads, llm-toolkit-bypass-waf, llm-toolkit-health.
Manual Setup
If you prefer to edit config manually, add to ~/.config/opencode/opencode.json:
Development Mode (source)
{
"mcp": {
"llm-toolkit": {
"type": "local",
"command": ["npx", "tsx", "/absolute/path/to/llm-toolkit/src/server.ts"],
"cwd": "/absolute/path/to/llm-toolkit",
"enabled": true
}
}
}
Production Mode (build)
{
"mcp": {
"llm-toolkit": {
"type": "local",
"command": ["node", "/absolute/path/to/llm-toolkit/dist/index.js"],
"cwd": "/absolute/path/to/llm-toolkit",
"enabled": true
}
}
}
MCP Server Usage
Add to MCP Client Config
{
"mcpServers": {
"llm-toolkit": {
"command": "node",
"args": ["/absolute/path/to/llm-toolkit/dist/index.js"]
}
}
}
Or use npx after publishing:
{
"mcpServers": {
"llm-toolkit": {
"command": "npx",
"args": ["llm-toolkit"]
}
}
}
Available Tools
| Tool | Description |
|---|---|
get-payloads |
Fetch payloads from a JSON file with optional filters (category, context, riskLevel) |
generate-payload |
Generate payload variants with mutations |
bypass-waf |
Generate WAF-specific bypass variants |
analyze-payload |
Analyze a payload to detect attack type and suggest bypass strategies |
encode |
Encode data (url, doubleUrl, hex, base64, htmlEntity, unicode) |
decode |
Decode data (url, hex, base64, htmlEntity, unicode, jwt) |
jwt-encode |
Create JWT tokens with optional secret and algorithm |
fetch-reference |
Fetch content from a URL reference |
validate-reference |
Validate that a content reference URL is reachable |
connect-mcp |
Connect to another MCP server via stdio transport |
call-mcp-tool |
Call a tool on a connected MCP server |
list-mcp-tools |
List tools available on a connected MCP server |
disconnect-mcp |
Disconnect from an MCP server |
list-connected-servers |
List all connected MCP servers |
Example Tool Calls
Fetch XSS payloads filtered by risk level:
{
"name": "get-payloads",
"arguments": {
"filepath": "payloads/xss.json",
"filters": { "riskLevel": "high" }
}
}
Generate payload variants with chained mutations:
{
"name": "generate-payload",
"arguments": {
"payload": "<script>alert(1)</script>",
"options": {
"mutations": ["caseMutation", "whitespaceMutation", "commentMutation"],
"chainMutations": true,
"encoding": "url"
}
}
}
Generate Cloudflare bypass variants:
{
"name": "bypass-waf",
"arguments": {
"payload": "' OR 1=1 --",
"wafType": "cloudflare"
}
}
Analyze a payload:
{
"name": "analyze-payload",
"arguments": {
"payload": "{{7*7}}"
}
}
Connect to another MCP server and call a tool:
{
"name": "connect-mcp",
"arguments": {
"command": "npx",
"args": ["-y", "@some/mcp-server"],
"name": "remote-server"
}
}
CLI Usage
# List available security tools
llm-toolkit list
# Install a specific tool
llm-toolkit install nuclei
llm-toolkit install subfinder
llm-toolkit install httpx
llm-toolkit install ffuf
llm-toolkit install katana
# Check what's installed
llm-toolkit status
# Uninstall a tool
llm-toolkit uninstall nuclei
# Start MCP server directly
llm-toolkit
# or
node dist/cli.js
Architecture
llm-toolkit/
├── src/
│ ├── index.ts # Package entry point, exports
│ ├── server.ts # Core MCP server, StreamableHTTP transport
│ ├── cli.ts # CLI installer (nuclei, subfinder, etc.)
│ ├── encoding.ts # Encode/decode utils (URL, hex, base64, HTML, Unicode, JWT)
│ ├── rate-limiter.ts # Token bucket per client (20 req/min default)
│ ├── generator.ts # Payload variant generator (6 mutation types)
│ ├── waf-bypass.ts # WAF-specific bypass engine (CF, ModSec, AWS, Generic)
│ ├── plugin-manager.ts # Dynamic plugin loading from ~/.llm-toolkit/plugins.json
│ ├── inter-mcp.ts # Bridge to other MCP servers (StdioClientTransport)
│ ├── content-fetcher.ts # Fetch/validate content references (articles, videos, PDFs)
│ └── tools/
│ └── index.ts # MCP tool handlers (14 tools registered)
├── payloads/
│ ├── xss.json # XSS payloads
│ ├── sqli.json # SQLi payloads
│ ├── ssrf.json # SSRF payloads
│ ├── ssti.json # SSTI payloads
│ ├── lfi.json # LFI payloads
│ ├── xxe.json # XXE payloads
│ ├── cmdi.json # Command injection payloads
│ └── nosqli.json # NoSQLi payloads
├── tests/ # Vitest test suite (48 tests)
├── scripts/ # Build and utility scripts
├── dist/ # tsup build output
│ ├── index.js # ESM library entry
│ └── cli.js # CLI binary entry
├── package.json
├── tsconfig.json
└── tsup.config.ts
Payload JSON Schema
Each payload file is a JSON array of entries:
[
{
"id": "xss-001",
"name": "Basic script tag",
"payload": "<script>alert('XSS')</script>",
"category": "xss",
"context": "unescaped HTML output",
"riskLevel": "high",
"description": "Standard script tag injection for reflected XSS",
"tags": ["reflected", "script-tag", "alert"]
}
]
| Field | Type | Required | Description |
|---|---|---|---|
id |
string | Yes | Unique identifier |
name |
string | Yes | Human-readable name |
payload |
string | Yes | The actual payload string |
category |
string | Yes | Vulnerability category |
context |
string | Yes | Where this payload applies |
riskLevel |
string | Yes | low, medium, high, critical |
description |
string | No | Explanation of the payload |
tags |
string[] | No | Classification tags |
Extending
Add New Payloads
Create a JSON file in payloads/ following the schema above. Load it via get-payloads with the file path.
Add Mutation Types
Edit src/generator.ts:
- Add a new mutation function:
export function myMutation(str: string): string { ... } - Add the type name to the
MutationTypeunion - Register it in the
mutationFnrecord
Add WAF Bypass Strategies
Edit src/waf-bypass.ts:
- Create a
BypassStrategy[]array for your WAF - Add it to the
WAF_STRATEGIESrecord with aWafTypekey
Create Plugins
Create ~/.llm-toolkit/plugins.json:
[
{
"name": "my-plugin",
"path": "/path/to/plugin.js",
"enabled": true
}
]
Plugins export an object with a register(server: McpServer) method to add custom tools.
Development
Tech Stack
- Runtime: Node.js 20+, ESM module
- Language: TypeScript (strict mode)
- Build: tsup (outputs ESM to
dist/) - Test: Vitest (48 tests)
- MCP SDK:
@modelcontextprotocol/sdk^1.25.0 - Validation: Zod ^3.25.0
Commands
npm install # Install dependencies
npm run build # Build with tsup
npm run dev # Watch mode rebuild
npm run typecheck # Type check (strict mode)
npm test # Run test suite
npm run test:watch # Watch mode tests
npm run test:coverage # Run with coverage
npm start # Start MCP server
Project Structure Conventions
- All source in
src/, compiled todist/ - Payload JSON files in
payloads/ - Tests colocated in
tests/ - Main entry:
dist/index.js - CLI binary:
llm-toolkitresolves todist/cli.js
Security
- Payloads are for authorized testing only
- Rate limiter prevents abuse (20 req/min default, configurable)
- No secrets or credentials stored in the toolkit
- Plugin loading restricted to user-controlled config at
~/.llm-toolkit/plugins.json - All tool inputs validated with Zod schemas
License
MIT
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/my-feature) - Make your changes
- Run the test suite (
npm test) - Ensure type checking passes (
npm run typecheck) - Commit with a descriptive message
- Push to your fork and open a Pull Request
Guidelines
- Keep payloads focused on practical, tested vectors
- Write tests for new mutations or WAF strategies
- Follow existing TypeScript strict patterns
- No
anytypes without justification - Keep tool handlers under 30 lines where possible
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
Neon Database
MCP server for interacting with Neon Management API and databases
E2B
Using MCP to run code via e2b.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.