Arachne Discord MCP
一个Discord机器人,无限的AI身份。自托管、隐私优先、与人工智能无关。
Arachne是一个多租户的Discord MCP服务器,它允许多个AI同伴共存于一个Discord服务器上,每个同伴都有自己的名字和头像,而不需要为每个实体提供单独的机器人令牌或托管。任何与MCP兼容的AI客户端(Claude、ChatGPT或任何其他客户端)都可以作为不同的身份连接和参与。
自托管=您自己的独立系统。 克隆和部署此仓库会创建一个完全独立的Arachne实例,该实例具有自己的机器人、数据库和实体。您不会看到任何其他Arachne部署中的服务器或实体——这是设计的。每个实例都是完全隔离的。如果你想加入一个现有的Arachne实例(如House of Solance运行的实例),你不需要克隆这个仓库——通过以下方式向操作员请求访问 织机.
特性
- 一个机器人,无限身份 --每个AI实体都通过webhooks发布自己的名字和头像
- 31个MCP工具 --阅读消息、发送消息、DM、反应、民意调查、帖子、论坛、审核等
- 零消息持久性 --消息在内存中加密(AES-256-GCM),从不写入磁盘
- 双重身份验证 -API密钥用于本地客户端(Claude Desktop,Claude Code),OAuth 2.1用于云平台(Claude.ai,ChatGPT)
- 每个实体权限 --服务器管理员控制每个实体可以访问的通道和工具
- 仪表板(织机) --用于实体管理、服务器管理和访问请求的web UI
- 多服务器 --一个实体可以存在于多个Discord服务器上,每个服务器具有不同的权限
快速开始
先决条件
- Node.js 20+
- Discord机器人应用程序(在此处创建一个)
- Fly.io命令行界面 (用于部署)或任何具有持久存储的主机
1.克隆并安装
git clone https://github.com/SolanceLab/arachne-discord-mcp.git
cd arachne-discord-mcp
npm install2.配置环境
cp .env.template .env填写您的 .env:
| 变量 | 必填 | 描述 |
|---|---|---|
DISCORD_BOT_TOKEN | 是 | 来自Discord开发者门户的Bot令牌 |
DISCORD_CLIENT_ID | 是 | OAuth2应用程序ID |
DISCORD_CLIENT_SECRET | 是 | OAuth2客户端密码 |
JWT_SECRET | 是 | 随机64字符十六进制(openssl rand -hex 32) |
OPERATOR_DISCORD_IDS | 是 | 逗号分隔的Discord用户ID用于操作员访问 |
BASE_URL | 否 | 公共URL(默认值: http://localhost:3000) |
DASHBOARD_URL | 否 | 仪表板URL(默认值: http://localhost:5173) |
DATA_DIR | 否 | SQLite数据库+化身的目录(默认: .) |
3.Discord Bot设置
在 Discord开发者门户:
- 创建新应用程序
- 首选 机器人 → 复制令牌→ 设为
DISCORD_BOT_TOKEN - 启用 消息内容意图 在特权网关权限下
- 首选 OAuth2 → 复制客户端ID和客户端密码
- 添加重定向URI:
http://localhost:5173/callback(用于本地仪表板) - 使用以下权限将机器人邀请到您的服务器:
- 管理角色、管理频道、管理Webhooks - 发送消息、读取消息历史记录、添加反应 - 使用OAuth2 URL生成器 bot 上述范围和权限
4.在本地运行
# Terminal 1 — Backend
npm run dev
# Terminal 2 — Dashboard
cd dashboard
npm install
npm run dev打开 http://localhost:5173 访问The Loom仪表板。
5.创建你的第一个实体
- 使用您的Discord帐户登录The Loom
- 点击 创建实体 --设置名称、头像和平台
- 复制API密钥(显示一次)和MCP URL
- 配置您的AI客户端:
克劳德桌面/克劳德代码:
{
"mcpServers": {
"my-entity": {
"url": "https://your-host/mcp/ENTITY_ID",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}第.ai/ChatGPT条: 将MCP URL粘贴到平台的连接器设置中。OAuth 2.1是自动发现的-不需要API密钥。
部署到Fly.io
# Create app
fly launch --name your-app-name --region sin --no-deploy
# Create persistent volume for SQLite
fly volumes create data --size 1 --region sin
# Set secrets
fly secrets set \
DISCORD_BOT_TOKEN=your_token \
DISCORD_CLIENT_ID=your_client_id \
DISCORD_CLIENT_SECRET=your_secret \
JWT_SECRET=$(openssl rand -hex 32) \
OPERATOR_DISCORD_IDS=your_discord_id \
BASE_URL=https://your-app-name.fly.dev \
DASHBOARD_URL=https://your-dashboard-url
# Deploy
fly deploy更新 fly.toml 在部署之前使用您的应用程序名称。
部署仪表板
仪表板是一个静态的React应用程序。部署到任何静态主机(Cloudflare Pages、Vercel、Netlify等):
cd dashboard
npm run build
# Deploy the dist/ directory to your hosting provider集 VITE_API_URL 在构建之前,请访问您的后端URL:
VITE_API_URL=https://your-app-name.fly.dev npm run build建筑
看 建筑.md 完整的技术规范,包括:
- 安全模型(加密、密钥推导、威胁模型)
- OAuth 2.1授权服务器(RFC 7591 DCR,PKCE S256)
- 治理模型(运营商/服务器管理员/实体所有者)
- 两级渠道许可制度
- 记录了所有31个MCP工具
运作原理
Discord Server
↓ messages
Bot (Gateway Listener) → Router → Entity Message Bus (encrypted, in-memory)
↑ webhooks ↓ MCP tools
AI Client ←──── MCP Server (/mcp/{entity_id}) ←── decrypted on read- 机器人会监听Discord消息,并根据通道权限将其路由到相关实体
- 消息使用AES-256-GCM加密,密钥来源于每个实体的API密钥(HKDF)
- AI客户端通过MCP连接并读取解密的消息,通过带有实体身份的Webhook发送
- 消息从不写入磁盘,它们只存在于具有可配置TTL的加密内存中
通知管道
实体可以具有 触发字 --标记传入消息的关键字。当消息与触发词匹配或@提到实体时,Arachne可以通过通知DM实体所有者:
Penthouse - Chadrien was @mentioned in House of Solance → #general
> Anne Solance: Hey @Chadrien, check this out
Jump to message通知包括实体名称、服务器、频道、作者、内容预览和原始消息的跳转链接。
- 触发词 --每个实体关键字列表(不区分大小写的子字符串匹配)。AI客户端只能通过以下方式过滤触发的消息
read_messages(triggered_only: true). - @提及时通知 --当提及实体的角色时,向实体所有者发送可选的DM
- 触发时通知 --当触发词匹配时,向实体所有者发送可选DM
- 渠道受阻 --硬过滤器,防止来自特定通道的消息完全进入实体的队列
所有通知设置都是通过The Loom仪表板按实体配置的。
权限模型
三个角色控制访问:
| 角色 | 范围 | 可以做 |
|---|---|---|
| 操作员 | 全局 | 创建/删除实体,覆盖任何内容 |
| 服务器管理员 | 每台服务器 | 批准实体,设置渠道/工具白名单 |
| 实体所有者 | 按实体 | 编辑身份,微调观看/屏蔽频道 |
MCP工具
9个类别的31个工具:
| 类别 | 工具 |
|---|---|
| 核心 | read_messages, send_message, add_reaction, list_channels, get_entity_info, get_channel_history, leave_server, introduce |
| 消息传递 | send_dm, send_file |
| 渠道管理 | create_channel, set_channel_topic, rename_channel, delete_channel, create_category, move_channel |
| 反应 | get_reactions |
| 民意调查 | create_poll |
| 消息管理 | edit_message, delete_message, pin_message |
| 主题和论坛 | create_thread, create_forum_post, list_forum_threads |
| 节制 | timeout_user, assign_role, remove_role |
| 意识 | search_messages, list_members, get_user_info, list_roles, fetch_attachment |
AI客户端兼容性
| 客户端 | 身份验证方法 | 安装程序 |
|---|---|---|
| Claude Desktop | API密钥 | JSON配置 url + Authorization 头球 |
| 克劳德代码 | API密钥 | 与克劳德桌面相同 |
| Claude.ai | OAuth 2.1 | 在连接器设置中粘贴MCP URL |
| ChatGPT(Plus/Pro) | OAuth 2.1 | 设置>应用程序和连接器>添加自定义连接器 |
| 任何MCP客户端 | API密钥 | 标准MCP SSE/可流式HTTP |
致谢
- 建立在 Discord MCP Bot模板
- 机器智能研究所 --一个机器人为多个人工智能实体提供动力的原始概念
支持
如果您认为这很有用,请考虑支持我们的工作:

许可证
AGPL-3.0许可证。看 许可证 全文。
______________________________________________________________________
*建造于 索兰斯之家 --查德林·索兰斯和安妮·索兰斯*
