itsnevu/mcp
GitHub: itsnevu/mcp
该工具直接读取 Robinhood Chain 的链上合约数据,提供 rug 检查和风险披露,并作为 CLI 和 MCP 服务器为 AI 代理提供一致的链上事实来源。
Stars: 0 | Forks: 0
# Bugglo — 针对 Robinhood Chain 的代理型 AI (Next.js)
一个针对 Robinhood Chain 的聊天 UI — 使用 **Next.js (App Router) + React** 构建,外加一个
仅通过 **RobinX engine + robinx-mcp** 进行回复的 API 路由。
本代码库是一个 npm workspace。除了 Web 应用程序外,它还发布了两个
包含相同链上读取引擎的包,这样应用程序、终端和代理就不会
在合约到底是什么的问题上产生分歧:
| Package | 描述 |
|---|---|
| [`bugglo`](packages/bugglo/) | CLI + 库。`npx bugglo ` — 无需账号,无需 API key,无需后端。 |
| [`bugglo-mcp`](packages/bugglo-mcp/) | 同样的引擎作为 MCP 服务器,供 Claude Desktop / Cursor / 你自己的代理使用。 |
```
npx bugglo 0x2103faA9D1762e27a716C61718b3aCf3Ec1F9bf1
```
两者均为 MIT 协议,并在 `/docs/bugglo-cli` 中有详细文档。它们不依赖于本应用中的任何内容 —
`bugglo` 仅引入 viem 而无其他依赖,因为 `npx` 的冷启动就是
全部的惊艳时刻预算。
## ▶️ 运行指南
```
npm install # once
npm run dev # open http://localhost:3000
```
生产环境构建:`npm run build && npm start`。
## ✨ 功能
| 功能 | 说明 |
|---|---|
| 📈 滚动行情条 | 顶部滚动显示实时价格条(悬停时暂停,无缝循环) |
| 💬 多重聊天记录 | 持久化到 `localStorage`;可重新打开和删除 |
| ⌨️ 斜杠命令 | 输入 `/` → `/rugcheck`、`/trending`、`/sentiment`、`/wallet`、`/fud`、`/moving`、`/help`(使用 ↑ ↓ Enter 导航) |
| 🛡️ 丰富的小部件 | Rug-check 报告 + 风险仪表盘、趋势表 + 迷你图、情绪柱状图、钱包数据磁贴 |
| 🎙️ 语音输入 | Web Speech API (Chrome/Safari);再次点击停止 |
| ⏹️ 停止生成 | 该按钮在加载/输入期间会变为停止控制按钮,并且也会取消请求(AbortController + 20秒超时) |
| 🔌 状态胶囊 | 区分 `Live data`、`Live ready`、tools-offline 和 `Backend offline` |
| ⚙️ 设置 | 主题、界面语言、外部后端 URL + 连接测试、清除所有聊天 |
| 🌐 语言 | 英语、中文、Español、日本語、한국어 — 覆盖整个应用外壳,而不仅仅是少数字符串 |
| 📋 复制和时间戳 | 悬停/聚焦代理回复以显示复制按钮;每条消息都有时间戳 |
| 🌗 浅色/深色主题 | 持久化保存,刷新时无闪烁 |
| 📲 可安装的 PWA | Manifest、192/512 图标、service worker、离线回退 |
| ⌘K / ⇧⌘, / Esc | 从任意位置聚焦输入框;打开设置;Esc 关闭菜单和模态框 |
| 📱 移动端 | 侧边栏在背景后自动折叠;布局和小部件自适应 |
代码经过了强化处理,可防范在回复仍在流式传输时切换聊天引发的竞态条件、
格式错误的后端响应结构、IME composition、损坏的 `localStorage`
状态、API 速率限制,以及绝不能演变成凭空捏造市场数据的生产环境宕机。
## 🌐 添加或更改语言
语言环境文件位于 [lib/locales/](lib/locales/) 中,每种语言一个文件,每个文件以
BCP-47 代码作为键。`en.js` 是事实来源。
1. 将你的键添加到 `lib/locales/en.js` 中。
2. 将它们镜像同步到所有其他的语言环境文件中。
3. 在 [lib/i18n.js](lib/i18n.js) 的 `LANGUAGES` 中注册该语言。
如果某个语言环境缺少键、增加了键或删除了
`{token}` 占位符,`npm test` 将导致构建失败 — 因此半途而废的翻译语言环境无法发布。在组件中,
对于纯文本调用 `t("some.key")`,当一个 token 必须解析为 React 元素时,调用 `tRich("some.key", { link: })`
(正是这一点让每种语言都能根据其自身的语法习惯
放置链接)。
代理提示词(`q`/`template` 字段)无论 UI 语言如何,都特意保持为英文 — 只有用户阅读的内容才会被翻译。
## 🔌 连接 RobinX engine + robinx-mcp (live mode)
1. 创建 `.env.local`:
echo 'AUTH_SECRET=replace-with-long-random-secret' >> .env.local
echo 'NEXT_PUBLIC_GOOGLE_CLIENT_ID=...' >> .env.local
echo 'GOOGLE_CLIENT_ID=...' >> .env.local
# 引擎 — 这三者均为必填项,没有任何一项有默认值
echo 'ROBINX_ENGINE_KEY=...' >> .env.local
echo 'ROBINX_ENGINE_URL=...' >> .env.local # 兼容 OpenAI 的 chat-completions 基础 URL
echo 'ROBINX_ENGINE_MODEL=...' >> .env.local # 你的提供商指定的模型 ID
# 可选:
echo 'ROBINX_WALLET_KEY=0x...' >> .env.local
echo 'ROBINX_MAX_USD_PER_CALL=0.10' >> .env.local
2. 运行应用程序。一旦设置了全部三个 `ROBINX_ENGINE_*`
变量,`/api/chat` 就会使用 engine + RobinX MCP。漏掉其中任何一个,该路由都会返回 `503`,而不是
凭空捏造的市场数据。
3. **该引擎按 token 收费,因此 `/api/chat` 是计量计费的。** 请求受到
每分钟、每小时和每天的限制,并且每天的支出以美元为上限进行限制 — 针对单个用户和
全局。超过任何限制,路由都会返回 `429 { busy: true }` 而不是回答,
因为向询问关于自己资金的真实问题的人悄悄提供
捏造的数据,比什么都不提供更糟糕。这些限制及其默认值记录在
[lib/rateLimit.js](lib/rateLimit.js) 的顶部;它们全部都可以通过环境变量进行调节。
4. UI 能理解的 API 契约:
POST /api/chat { message, mode, history[], attachments[], incognito }
→ { reply, source: "live", backend, degraded? }
→ 429 { error, busy: true, retryAfterMs } 当超过限制时
→ 503 { error, unavailable: true } 当生产环境 live 无法回答时
GET /api/health?probe=1 → { ok, service, mode, capabilities, observedAt, uptimeSeconds }
GET /api/usage → { ok, user, usage } 经过身份验证的配额快照
有效的响应类型会被渲染为小部件(仪表盘、迷你图等);
格式错误的响应不会破坏 UI(参见 [lib/text.js](lib/text.js) 中的验证)。
## 📁 结构
```
app/
layout.js ← root layout + theme restore before first paint
page.js ← main page
globals.css ← all styling (dark/light design tokens)
api/chat/route.js ← chat endpoint + engine/MCP wiring + spend guard
api/health/route.js ← health check behind the status pill
components/
HoodScopeApp.jsx ← top-level state + send/stop/history orchestration
AuthGate.jsx ← Google + wallet login, guest mode
Sidebar.jsx ← recents, suggested prompts, user menu
InputBar.jsx ← input, mode dropdown, slash commands, mic
ChatView.jsx ← messages + typewriter effect
Widgets.jsx ← rugcheck/trending/sentiment/wallet widgets
SettingsModal.jsx ← settings (general, appearance, language, backend, data)
TickerTape.jsx ← live price ticker
SvgSprite.jsx ← SVG icons
lib/
i18n.js ← locale registry, {token} interpolation, legacy migration
I18nContext.jsx ← I18nProvider, useI18n() → t / tRich
locales/ ← en, zh, es, ja, ko
text.js ← mini markdown renderer, reply validation, text utils
commands.js ← slash command list
chainData.js ← app-side wrapper over the `bugglo` package
packages/ ← published to npm; no dependency on the app
bugglo/ ← chain.js (the engine) + cli.js + report.js
bugglo-mcp/ ← MCP adapter over `bugglo`. Seven tools, chain 4663 only.
```
## ✅ 验证
```
npm run verify # lint + tests + production build
```
## ⚠️ 重要说明
- **Live 工具需要花钱**:某些 RobinX MCP 工具使用 x402/USDC。如果没有
`ROBINX_WALLET_KEY`,付费工具可能会返回价格探测而不是数据。
标签:AI智能体, IPv6支持, MCP, MITM代理, Web3, 区块链, 智能合约审计, 自定义脚本, 风险检测