openclaw插件reddit
生产级OpenClaw插件,通过固定依赖关系公开Reddit功能:
SevenOfNine-ai/reddit-mcp-server- 固定提交:
aa188ec7aba1b6a81398c626dc0ddd45baa6fb68
安全态势(默认)
- ✅ 默认情况下启用读取工具
- ✅ 默认情况下禁用写入工具
- ✅ 写入注册为可选的工具(需要明确的工具分配列表)
- ✅ 删除操作需要额外的明确选择加入
- ✅ 已启用读/写速率限制
- ✅ 启用写入模式时,Reddit安全模式默认为严格模式
- ✅ 仓库中没有明文秘密持久性
工具表面
读取工具(默认启用)
test_reddit_mcp_serverget_reddit_postget_top_postsget_user_infoget_user_postsget_user_commentsget_subreddit_infoget_trending_subredditsget_post_commentssearch_reddit
写入工具(可选+防护)
create_postreply_to_postedit_postedit_commentdelete_postdelete_commentvote_post
当 write.requireSubredditAllowlist=true,所有写入工具都需要 subreddit 用于满负荷检查。对于非-create_post 写入时,此字段是仅包装器策略上下文,在向上游转发之前会被剥离。
安装
openclaw plugins install ./openclaw-plugin-reddit
# or from package registry once published安装/配置更改后重新启动网关。
配置
照顾 plugins.entries.openclaw-plugin-reddit.config.
只读模式(推荐默认)
strictStartup 默认为 false 对于向后安全行为:记录启动检查失败,但不要中止插件启动。
{
plugins: {
entries: {
"openclaw-plugin-reddit": {
enabled: true,
config: {
reddit: {
authMode: "auto"
},
write: {
enabled: false,
allowedTools: []
}
}
}
}
}
}写启用模式(显式选择加入)
当write.requireSubredditAllowlist=true, 所有写调用 (create_post,reply_to_post,edit_post,edit_comment,delete_post,delete_comment)必须包括subreddit出现在中的值write.allowedSubreddits.
{
plugins: {
entries: {
"openclaw-plugin-reddit": {
enabled: true,
config: {
reddit: {
authMode: "authenticated",
safeModeWriteEnabled: "strict"
},
write: {
enabled: true,
allowDelete: false,
allowedTools: [
"create_post",
"reply_to_post",
"edit_post",
"edit_comment"
],
requireSubredditAllowlist: true,
allowedSubreddits: ["test", "myprivatecommunity"]
},
rateLimit: {
readPerMinute: 60,
writePerMinute: 6,
minWriteIntervalMs: 5000
}
}
}
}
},
agents: {
list: [
{
id: "main",
tools: {
allow: [
"create_post",
"reply_to_post",
"edit_post",
"edit_comment"
]
}
}
]
}
}可选的故障快速启动模式
集 strictStartup: true 当初始桥接/奇偶校验失败时,插件启动失败。
{
plugins: {
entries: {
"openclaw-plugin-reddit": {
enabled: true,
config: {
strictStartup: true
}
}
}
}
}凭证处理(无明文秘密)
仅在环境(或您的秘密管理器)中设置秘密,而不是在仓库文件中。
下游reddit mcp服务器预期的默认值:
REDDIT_CLIENT_IDREDDIT_CLIENT_SECRETREDDIT_USERNAMEREDDIT_PASSWORDREDDIT_USER_AGENT(可选)
您可以在插件配置中重新映射变量名 reddit.env.*.
子进程环境强化:插件仅将最小的已分配基线环境转发给reddit mcp服务器子进程,然后注入显式 REDDIT_* 变量。默认情况下,不转发不相关的主机机密。
硬化检查表
- \[\]除非有特别需要,否则应禁用写入模式。
- \[\]如果启用写入,请保留
safeModeWriteEnabled=strict. - \[\]保持
allowDelete=false除非绝对需要。 - \[\]明确设置最小值
write.allowedTools. - \[\]限制所有写入
allowedSubreddits(包括subreddit启用允许列表模式时的写调用)。 - \[\]尽量减少OpenClaw代理编写工具的分配(代理工具策略)。
- \[\]保持OpenClaw插件的allowlist显式(
plugins.allow). - \[\]运行
openclaw security audit --deep推出后。
安全注意事项
速率限制持久性
重要:速率限制状态存储在内存中,并在OpenClaw网关进程重新启动时重置。对于高安全性部署:
- 保护网关进程免受未经授权的重启
- 监控异常重启模式
- 如果需要,考虑实施持久速率限制存储
- 依靠Reddit自己的API速率限制作为额外的防御层
本地开发
此项目使用 纱线4 使用corepack。
# Enable corepack (first time only)
corepack enable
# Install dependencies
yarn install
# Run all checks
yarn validate
# Build
yarn build测试策略
- 单元测试:配置、策略、限制器、启动规范、插件行为
- 集成测试:
- 模拟MCP stdio服务器线束 - 逼真的防钉安全带 reddit-mcp-server
- 阴性/安全测试:
- 缺失的信条 - 以只读模式阻止写入 - 在没有明确选择加入的情况下阻止删除 - 利率限制拒绝 - 结构化重新连接信号处理(类型化MCP/节点传输错误) - 重新连接生命周期故障/恢复行为
CI质量门
GitHub Actions工作流强制执行:
- 棉绒
- 类型检查
- 测试
- 覆盖阈值门
文档
📚 完整文档可在GitHub Pages上找到 (通过GitBook部署)
docs/architecture/README.md-架构概述SECURITY_AUDIT_2026-02-11.md-安全审计报告CLAUDE.md-发展指南docs/research/01-openclaw-plugin-best-practices.mddocs/research/02-template-evaluation.md
安全凭据提供程序(迁移)
该插件现在支持三个凭据提供程序:
git-credential(默认,推荐)pass-clienv(传统/向后兼容,安全性较低)
重要变化
- 用户名是非机密的,应配置为
reddit.username. - 对于安全提供商(
git-credential,pass-cli),插件会 不 注入REDDIT_CLIENT_SECRET/REDDIT_PASSWORD进入MCP子流程环境。 env模式保留旧行为以保持兼容性。
示例生产配置(推荐)
{
"reddit": {
"authMode": "authenticated",
"credentialProvider": "git-credential",
"username": "your_reddit_username",
"gitCredential": {
"host": "reddit.com",
"clientSecretPath": "oauth-client-secret",
"passwordPath": "password"
}
},
"write": {
"enabled": true,
"allowedTools": ["create_post", "reply_to_post"],
"requireSubredditAllowlist": true,
"allowedSubreddits": ["yoursubreddit"]
}
}传递cli配置
{
"reddit": {
"credentialProvider": "pass-cli",
"username": "your_reddit_username",
"passCli": {
"command": "pass-cli",
"clientSecretKey": "pass:////client_secret",
"passwordKey": "pass:////password"
}
}
}运行时注意事项:
git-credential是默认提供程序和推荐基线。pass-cli是可选的,应仅配置密钥/URI引用(插件配置中没有明文秘密)。env是传统模式,仅用于向后兼容性;只在本地/dev上下文中使用它。- 对于安全提供商(
git-credential,pass-cli),setreddit.username明确(或通过--username当直接运行服务器时)。
