Config is the same across clients — only the file and path differ.
{
"mcpServers": {
"io-github-virgilvox-furlow-mcp": {
"args": [
"-y",
"@furlow/cli"
],
"command": "npx"
}
}
}Are you the author?
Add this badge to your README to show your security score and help users find safe servers.
Build powerful Discord bots with YAML. No code required.
Run this in your terminal to verify the server starts. Then let us know if it worked — your result helps other developers.
npx -y '@furlow/cli' 2>&1 | head -1 && echo "✓ Server started successfully"
After testing, let us know if it worked:
Five weighted categories — click any category to see the underlying evidence.
No known CVEs.
Checked @furlow/cli against OSV.dev.
Be the first to review
Have you used this server?
Share your experience — it helps other developers decide.
Sign in to write a review.
Others in developer-tools / productivity
Persistent memory using a knowledge graph
Read, write, and manage files on the local filesystem
A Model Context Protocol (MCP) server and CLI that provides tools for agent use when working on iOS and macOS projects.
XcodeBuildMCP provides tools for Xcode project management, simulator management, and app utilities.
MCP Security Weekly
Get CVE alerts and security updates for io.github.virgilvox/furlow-mcp and similar servers.
Start a conversation
Ask a question, share a tip, or report an issue.
Sign in to join the discussion.
Declarative Discord Bot Framework
Build powerful Discord bots with YAML. No code required.
commands:
- name: ping
description: Check bot latency
actions:
- reply:
content: "Pong! ${client.ws.ping}ms"
# Install the CLI
npm install -g @furlow/cli
# Create a bot
furlow init my-bot
cd my-bot
# Add your Discord credentials to .env
echo "DISCORD_TOKEN=your_token_here" > .env
echo "DISCORD_CLIENT_ID=your_client_id_here" >> .env
# Start
furlow start
version: "0.1"
identity:
name: "My Bot"
presence:
status: online
activity:
type: playing
text: "with FURLOW"
commands:
- name: hello
description: Greet someone
options:
- name: user
type: user
description: Who to greet
actions:
- reply:
content: "Hello, ${options.user.display_name || options.user.username}!"
- name: roll
description: Roll a dice
options:
- name: sides
type: integer
description: Number of sides
min_value: 2
max_value: 100
actions:
- reply:
content: "🎲 You rolled **${random(1, options.sides || 6)}**"
events:
- event: member_join
actions:
- send_message:
channel: "${env.WELCOME_CHANNEL}"
content: "Welcome ${member.displayName}!"
| Command | Description |
|---|---|
furlow init [name] | Create a new bot project |
furlow start [path] | Run the bot |
furlow dev [path] | Development mode with hot reload |
furlow validate <path> | Validate YAML specification |
furlow add <builtin> | Add builtin module |
furlow build [path] | Bundle for deployment |
furlow export <path> | Export Discord command JSON |
| Guide | Description |
|---|---|
| Installation | Setup and requirements |
| Quick Start | Your first bot |
| Configuration | YAML specification |
| Actions Reference | All 85 actions |
| Expressions Reference | Functions and transforms |
| Events Reference | Event types |
| CLI Reference | Command-line interface |
| Pipes Reference | External integrations |
| Examples | Complete bot examples |
| Package | Description |
|---|---|
furlow | CLI tool |
@furlow/core | Runtime engine |
@furlow/discord | Discord.js adapter |
@furlow/schema | TypeScript types |
@furlow/storage | Database adapters |
@furlow/builtins | Pre-built modules |
@furlow/pipes | HTTP, WebSocket, MQTT, TCP/UDP, webhooks, database, file |
@furlow/testing | Test utilities |
A short checklist for shipping a bot to production. Each item lines up with a runtime guarantee — skipping one usually shows up later as silent data loss, an unscheduled feature, or a publicly forgeable session.
# Discord
DISCORD_TOKEN=...
DISCORD_CLIENT
... [View full README on GitHub](https://github.com/virgilvox/discord-furlow#readme)