Bling-bag
Bling Bag — ボットのアイデンティティと視覚スタイルのためのMCPサーバー
1つのアイデンティティ、多様なインターフェース。AIエージェントに名前、性格、外見、そして一風変わったオフィスワーカーとしての背景を与え、Claude Code、Claude Desktop、IDEプラグイン、ターミナル、Webアプリ、Slack、Discord全体で一貫して提示できるようにします。
ステータス: MVP稼働中。5つのMCPツール、13の特性プール(465の重み付けエントリ)、完全なレアリティエンジンを搭載。94/94のテストを通過済み。
このMCPがエージェントに提供するもの
2つのグループに分かれた5つのツール:
アイデンティティとスタイリング(設定済みのボットを読み取る)
get_identity— ボットの完全なアイデンティティ(名前、性格、外見、テーマカラー)を返しますget_theme_for_platform— プラットフォーム用にフォーマットされたスタイル(ANSIコード、CSS変数、Slack/Discord埋め込みカラーなど)を返します
WOW — Weird Office Workers(ランダムアイデンティティ生成)
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 builddist/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設定パスを解決します:
--bling <path>CLI引数(最優先)BLING_PATH環境変数サーバーの作業ディレクトリ内の
./bling.json(デフォルト)
bling.json — ボットのアイデンティティファイル
name、personality(tone、formality、humorを含む)、theme(primary_colorとaccent_colorを #RRGGBB の16進数文字列で指定)の3つのフィールドが必須です。
最小構成例
{
"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ツールリファレンス
ツール | 読み取り/書き込み | 冪等性 | 説明 |
| 読み取り (ディスク) | はい | 設定された bling.json アイデンティティを返す |
| 読み取り (ディスク) | はい | プラットフォーム用にフォーマットされたスタイル。引数: |
| メモリ内キャッシュを変更 | いいえ | レアリティスコア付きのランダムなWOWキャラクターを生成する |
| 書き込み (ディスク) | いいえ | 直近の抽選結果を bling.json に保存する(先に |
| 読み取り (メモリ内) | はい | 直近の抽選結果に対する共有カードテキストを返す |
すべてのツールは content[].text(JSON文字列化)と structuredContent(解析済みオブジェクト)の両方を返します。エラー時は isError: true と { error: string } ボディが返されます。
WOW (Weird Office Workers) — 興味深い点
ランダム抽選システムは収集性を考慮して構築されています:
13の重み付けプール、465エントリ — 名前、役職、習慣、コーヒーの儀式、身長、アクセサリーなど。
プールごとに5つのレアリティ帯 — Common (50%), Uncommon (30%), Rare (15%), Legendary (4%), Mythic (1%)
レアリティスコアから算出される5つのキャラクター階層:
Filing Clerk (抽選の50%)
Team Lead (30%)
Middle Manager (14%)
C-Suite (5%)
HR Warned Us About (1%)
Named Subjects — 手書きの1点物キャラクターが約0.5%の確率で出現し、常に「HR Warned Us About」に分類されます
HOMUNCULUSフレーム — すべての抽選結果は、被験者ID、コホート(曜日)、階層、取り込み日、フラグ(例: Do Not Contact)を含む機密文書形式の共有カードでラップされます
分布は実証的にテストされています:tests/mystery_box.test.ts での1万回のテストにより、仕様目標に対して ±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/ 配下にある2つの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
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