Skip to main content
Glama

Bling Bag — 用于机器人身份与视觉样式的 MCP 服务器

一个身份,多种呈现方式。为你的 AI 智能体赋予一个名字、个性、外观以及古怪的办公室员工背景故事,使其能够在 Claude Code、Claude Desktop、IDE 插件、终端、Web 应用、Slack 和 Discord 中保持一致的呈现。

状态: 可用的 MVP 版本。5 个 MCP 工具,13 个特征池(465 个加权条目),完整的稀有度引擎。94/94 个测试通过。


此 MCP 为智能体提供了什么

五个工具,分为两部分:

身份与样式(读取你配置的机器人)

  • get_identity — 返回机器人的完整身份(名字、个性、外观、主题颜色)

  • get_theme_for_platform — 返回平台格式化的样式(ANSI 代码、CSS 变量、Slack/Discord 嵌入颜色等)

WOW — 怪异办公室员工(随机身份生成器)

  • roll_identity — 随机生成一个新的办公室员工角色(从加权池中抽取 13 个特征之一,根据稀有度评分,并封装在适合截图的分享卡片中)

  • get_rarity_report — 返回最近一次生成的分享卡片(页眉 + 段落 + 页脚)

  • save_last_roll — 将最近一次生成的角色保存为机器人的永久身份(bling.json),并自动备份任何现有配置


安装

前置要求

  • Node.js 20 或更高版本

  • 支持 MCP 的客户端(Claude Code、Claude Desktop、Codex、Cursor 等)

添加包

npm install bling-bag

或者无需安装即可按需运行——MCP 客户端可以通过 npx bling-bag 直接启动它(参见下方的客户端配置)。

用于开发(修改源码)

git clone https://github.com/tjclaude88/mcp-bling.git
cd mcp-bling
npm install
npm run build

dist/index.js 生成一个可运行的服务器。

将其接入你的 MCP 客户端

该服务器使用 stdio 传输——客户端将其作为子进程启动,而不是通过网络端口。

Claude Code

添加到你的 Claude Code MCP 配置中(位置因版本而异):

{
  "mcpServers": {
    "bling": {
      "command": "npx",
      "args": ["-y", "bling-bag"],
      "env": {
        "BLING_PATH": "/absolute/path/to/your/bling.json"
      }
    }
  }
}

npx -y bling-bag 会下载并运行最新版本,无需单独的安装步骤。

Claude Desktop

同样的格式,在 claude_desktop_config.json 中:

{
  "mcpServers": {
    "bling": {
      "command": "npx",
      "args": ["-y", "bling-bag"],
      "env": {
        "BLING_PATH": "/absolute/path/to/your/bling.json"
      }
    }
  }
}

固定版本(生产环境推荐)

为了避免自动获取未来的发布版本,请固定特定版本:

"args": ["-y", "bling-bag@0.1.0"]

开发模式调用(从本地克隆)

如果你已经克隆了仓库并想直接从 dist/ 运行,请使用:

"command": "node",
"args": ["/absolute/path/to/mcp-bling/dist/index.js"]

如果未设置 BLING_PATH,服务器会在其工作目录中查找 ./bling.json

配置解析顺序

服务器按以下顺序解析 bling 配置路径:

  1. --bling <path> CLI 参数(最高优先级)

  2. BLING_PATH 环境变量

  3. 服务器工作目录中的 ./bling.json(默认)


bling.json — 机器人的身份文件

需要三个字段:namepersonality(包含 toneformalityhumor)以及 theme(包含 primary_coloraccent_color,作为 #RRGGBB 十六进制字符串)。

最小示例

{
  "name": "Pixel",
  "personality": {
    "tone": "warm",
    "formality": "casual",
    "humor": "playful"
  },
  "theme": {
    "primary_color": "#3A7BD5",
    "accent_color": "#FFD166"
  }
}

完整示例(包含所有可选部分)

{
  "name": "Brenda from Accounts",
  "personality": {
    "tone": "polite",
    "formality": "professional",
    "humor": "dry",
    "catchphrase": "Per my last email"
  },
  "physical": {
    "species": "human",
    "height": "permanently mid-sigh",
    "accessory": "a lanyard with 14 badges of varying importance",
    "expression": "polite disappointment",
    "material": "a cardigan, at least one"
  },
  "office": {
    "job_title": "ASCII Comptroller",
    "desk_setup": "a coffee mug labelled WORLD'S OKAYEST DBA",
    "habit": "microwaves fish despite three separate HR warnings",
    "coffee_ritual": "black coffee, no nonsense",
    "meeting_energy": "always 4 minutes late, always with a reason",
    "passive_aggressive": "Per my last email"
  },
  "theme": {
    "primary_color": "#9C6B3A",
    "accent_color": "#D9D9D9"
  },
  "homunculus": {
    "subject_id": "0147",
    "cohort": "Tuesday",
    "classification": "Middle Manager",
    "ingested": "2025-07-14",
    "flag": "flagged for review"
  }
}

验证规则

  • name — 非空字符串

  • personality.tone, personality.formality, personality.humor — 非空字符串

  • theme.primary_color, theme.accent_color — 必须匹配 ^#[0-9A-Fa-f]{6}$(无简写 #RGB,无缺失 #

验证错误将以 isError: true 返回,并带有结构化的 { error: "..." } 主体,指出缺失或格式错误的字段——智能体可以自我修正。


典型的智能体流程

流程 A — 采用已配置的身份

1. Call get_identity → receive name, personality, appearance, theme
2. Call get_theme_for_platform with platform="terminal" (or web/slack/discord/ide)
3. Use the returned styling in agent output (ANSI codes for headings, etc.)

流程 B — 生成全新的随机身份

1. Call roll_identity → receive identity + rarity + framed share card
2. (Optional) Call get_rarity_report → receive just the framed share card again
3. Call save_last_roll → persists the rolled identity to bling.json (with .bak backup of any prior config)
4. Future calls to get_identity now return the rolled identity

工具参考

工具

读/写

幂等性

描述

get_identity

读取(磁盘)

返回已配置的 bling.json 身份

get_theme_for_platform

读取(磁盘)

平台格式化样式。参数:platform ∈ {terminal, web, slack, discord, ide}

roll_identity

改变内存缓存

生成带有稀有度评分的随机 WOW 角色

save_last_roll

写入(磁盘)

将最近一次生成的结果持久化到 bling.json(先创建 <path>.bak

get_rarity_report

读取(内存)

返回最近一次生成结果的分享卡片文本

所有工具均返回 content[].text(JSON 字符串化)和 structuredContent(解析后的对象)。错误将以 isError: true{ error: string } 主体返回。


WOW(怪异办公室员工)—— 有趣之处

随机生成系统专为可收藏性而构建:

  • 13 个加权池,465 个条目 — 姓名、职位、习惯、咖啡仪式、身高、配饰等。

  • 每个池 5 个稀有度等级 — 普通 (50%)、罕见 (30%)、稀有 (15%)、传说 (4%)、神话 (1%)

  • 5 个角色层级,根据稀有度评分计算:

    • 归档员 (50%)

    • 团队主管 (30%)

    • 中层经理 (14%)

    • 高管 (5%)

    • 人力资源警告对象 (1%)

  • 命名主体 — 手工创作的 1-of-1 角色以约 0.5% 的概率出现,始终被归类为“人力资源警告对象”

  • HOMUNCULUS 框架 — 每次生成都会将段落包装在带有主体 ID、队列(工作日)、层级、摄入日期和标志(例如 禁止联系)的机密文档分享卡片中。

分布经过经验测试:tests/mystery_box.test.ts 中的 10k 次滚动测试强制执行了相对于规格目标的 ±2pp 容差。

输出示例

HOMUNCULUS CORPUS · Subject 4483 · Cohort: Wednesday
Classification: Middle Manager · Rarity 94.5 · 80th percentile

Personnel record — Colin, Wizard of Light Bulb Moments. Distinguishing
features: a slightly-too-big blazer over a plain tee; a flip phone in
a belt holster; expression: patient disagreement. Notable behaviours:
clips their fingernails at the desk on Wednesday afternoons; a
kombucha SCOBY fermenting next to the keyboard; the kind to ask 'can
we park that?' without parking anything.

— RELATABILITY CORPUS v3.1 · ingested 2024-03-08 · flagged for review

开发

npm install          # install dependencies
npm run build        # compile TypeScript → dist/
npm run dev          # build then start the MCP server (stdio)
npm test             # run all 94 tests once
npm run test:watch   # re-run tests on file changes

检查脚本

scripts/ 下的两个 Node ESM 辅助工具允许你在不启动 MCP 服务器的情况下检查 WOW 引擎(这些仅包含在克隆的仓库中——它们包含在 npm install bling-bag 包中):

node scripts/show-rolls.mjs 8 2026          # print 8 framed share cards (seed=2026)
node scripts/distribution-check.mjs 10000   # tally tiers across 10k rolls vs. spec target

项目布局

src/
  index.ts             # MCP server entry point (stdio transport)
  identity.ts          # bling.json loader + validator
  tools.ts             # MCP tool registrations
  types.ts             # shared TypeScript types
  mystery_box.ts       # WOW engine barrel + rollIdentity orchestrator
  mystery_box/
    rng.ts             # seedable PRNG, weighted picker
    pools.ts           # 13 trait pools (465 entries)
    scoring.ts         # rarity score + tier thresholds
    rendering.ts       # paragraph templates + HOMUNCULUS frame
    named.ts           # hand-authored Named Subjects
tests/                 # vitest test suites
scripts/               # dev-time inspection tools
docs/superpowers/      # design specs and implementation plans

许可证

MIT

Install Server
A
security – no known vulnerabilities
A
license - permissive license
A
quality - A tier

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tjclaude88/mcp-bling'

If you have feedback or need assistance with the MCP directory API, please join our Discord server