Destiny 2 MCP Server
MCP server that provides full read/write access to the Bungie API for Destiny 2, enabling AI assistants to manage inventory, equipment, loadouts, subclass configuration, vendors, and account stats for a user's Destiny 2 characters. It runs locally with OAuth authentication and exposes 23 tools for comprehensive game management.
README
Destiny 2 MCP Server
An MCP (Model Context Protocol) server giving full read/write access to the Bungie API for your Destiny 2 account — usable from ChatGPT web, Claude Code, Claude Desktop, or any MCP client. Ask an AI to find god rolls in your vault, build loadouts, move gear between characters, configure your subclass, check Xur's stock, or pull raid stats. Runs entirely on your machine; your Bungie credentials never leave it.
Prerequisites
- Node.js ≥ 20
- A Bungie.net account (with cross-save/platform Destiny 2 characters)
Bungie app registration
- Go to https://www.bungie.net/en/Application and sign in.
- Click Create New App.
- Fill in:
- Application Name: anything (e.g.
My D2 MCP) - Website: anything (e.g.
https://localhost) - OAuth Client Type:
Confidential - Redirect URL:
https://localhost:7778/callback - Scope: check Read your Destiny 2 information, Move or equip Destiny gear, and the other read scopes (basic profile, groups/clans, vendors and advisors).
- Origin Header: leave blank.
- Application Name: anything (e.g.
- Agree to the terms and save.
- Copy the API Key, OAuth client_id, and OAuth client_secret — you need all three next.
Setup
cp .env.example .env # paste in your API key, client_id, client_secret
npm install
npm run setup # generates the self-signed cert for the local OAuth server
npm start
On first boot the server downloads the Destiny manifest (~200 MB) — give it a minute.
Then open https://localhost:7778/auth in a browser, click through the self-signed-certificate warning (Advanced → Proceed), and sign in with Bungie. That's a one-time step; tokens are saved and refreshed automatically.
The MCP endpoint is now live at http://localhost:7777/mcp.
Verify
npm run smoke
Read-only live test: looks up Gjallarhorn in the manifest, fetches your account, and prints each character's power level. Ends with SMOKE OK.
Connect ChatGPT web
ChatGPT can't reach localhost directly. The supported path is OpenAI's Secure MCP Tunnel: a daemon on your machine makes an outbound connection to OpenAI, and ChatGPT talks to your server through it. No public URL, no exposed port.
Requires a ChatGPT plan with developer mode (Plus/Pro/Business) and an OpenAI platform account.
-
Enable developer mode: ChatGPT → Settings → Apps & Connectors → Advanced settings → Developer mode.
-
Create a tunnel: platform.openai.com → Settings → Tunnels → Create tunnel. Copy the
tunnel_id. -
Create a runtime API key: Runtime API keys, with Tunnels Read + Use permissions. This key only authenticates the tunnel — it doesn't spend model credits.
-
Install
tunnel-clienton the machine running this server: download the binary for your platform from openai/tunnel-client releases and put it on your PATH. -
Configure and run (with
npm startalready running):export CONTROL_PLANE_API_KEY="sk-..." # the runtime key tunnel-client init \ --sample sample_mcp_remote_no_auth \ --profile destiny2 \ --tunnel-id tunnel_YOUR_ID \ --mcp-server-url http://localhost:7777/mcp tunnel-client run --profile destiny2tunnel-client doctor --profile destiny2flags a failedoauth_metadatacheck — expected, this server has no OAuth layer; plain MCP servers still reach ready. Confirm withcurl http://127.0.0.1:8080/readyz→ready. -
Add the plugin: ChatGPT → Plugins → + → Connection: Tunnel → select your tunnel. Authentication: None. Give it a name and a capability-rich description (the model uses the description to decide when to call your tools).
Keep tunnel-client run alive alongside npm start (e.g. systemd services) — ChatGPT needs both for every call.
Alternative without an OpenAI platform account: expose the server publicly with cloudflared tunnel --url http://localhost:7777 and add the URL as a connector — but then anyone with the URL controls your Destiny inventory; protect it or rotate it regularly.
Connect Claude
Claude Code:
claude mcp add --transport http destiny2 http://localhost:7777/mcp
Claude Desktop: Settings → Connectors → Add custom connector, URL http://localhost:7777/mcp.
Tools (23)
Read (13)
| Tool | Description |
|---|---|
get_profile |
Destiny 2 account overview: characters (class, power, race, playtime), currencies like Glimmer. |
get_character |
One character in detail: stats (Mobility etc.) and all currently equipped items with power. |
search_inventory |
Search ALL items across every character and the vault. Filter by name and/or item type substring (e.g. "Rocket Launcher", "Helmet"). Returns instance ids needed by transfer/equip tools. |
get_item_details |
Full detail for one item instance: perks/mods in each socket (with socket indexes for insert_plug), stats, energy. |
get_vendors |
List all currently available vendors (Xur, Banshee-44, Ada-1...) with refresh times. Use get_vendor_items for stock. |
get_vendor_items |
One vendor's current stock with costs. vendor_hash from get_vendors (Xur: 2190858386). |
get_loadouts |
In-game loadout slots per character. loadout_index feeds equip_loadout / snapshot_loadout. |
get_milestones |
Current weekly milestones/activities across the game (public info, no character needed). |
get_activity_history |
Recent completed activities for a character. mode: 0=all, 5=PvP, 7=PvE, 4=raid, 82=dungeon, 84=Trials, 46=GM nightfall. |
get_stats |
Lifetime account stats, split PvE / PvP: kills, K/D, activities cleared, time played, and more. |
get_clan |
The account's clan: name, motto, member count, online members. |
search_player |
Find any player by full Bungie name ("Guardian#1234") → their membership ids. |
search_manifest |
Look up any Destiny definition by name → hash. Items by default; set table for perks (DestinySandboxPerkDefinition), activities (DestinyActivityDefinition), etc. |
Write (9)
| Tool | Description |
|---|---|
transfer_item |
Move an item between a character and the vault. Get item_instance_id + item_hash from search_inventory. To move char→char: transfer to vault first, then vault→other char. |
equip_item |
Equip one item on a character. Only works in orbit/social spaces or offline (Bungie restriction). |
equip_items |
Equip several items at once on a character (full loadout swap). Same location restriction as equip_item. |
equip_loadout |
Apply a saved in-game loadout slot. Get loadout_index from get_loadouts. |
snapshot_loadout |
Save the character's CURRENT equipment into an in-game loadout slot (overwrites that slot). |
pull_from_postmaster |
Pull an item from the postmaster to the character. Find postmaster items via search_inventory (they sit in the Lost Items bucket). |
set_lock_state |
Lock or unlock an item (protects from dismantle in game). |
insert_plug |
Socket a mod/aspect/fragment/free perk into an item (armor mods, subclass configuration, crafted weapon free swaps). plug = exact name or hash. socket_index from get_item_details. Only FREE socket operations work (Bungie blocks paid ones for all third-party apps). |
change_subclass |
Equip a subclass by name (e.g. "Solar", "Prismatic") and optionally configure its super/aspects/fragments in one call. For plugs: first call get_item_details on the subclass instance to see socket indexes. |
Raw (1)
| Tool | Description |
|---|---|
bungie_api_call |
Escape hatch: call ANY Bungie.net Platform endpoint directly (https://bungie-net.github.io/multi lists all ~150). path is relative to /Platform, e.g. "/Destiny2/Manifest/". Prefer the specific tools when one fits; responses here are raw JSON with unresolved hashes. |
Known Bungie limits
- Equipping only works while the character is in orbit, in a social space, or offline — the game rejects equip requests mid-activity.
- Paid perk/mod swaps are blocked for all third-party apps: Bungie's
AdvancedWriteActionsonly permits free socket operations (armor mods, subclass config, crafted-weapon free swaps). Anything that costs materials must be done in game. - Refresh token expires after 90 days. If API calls start failing with auth errors, re-run the one-time OAuth:
npm start, then openhttps://localhost:7778/authagain.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。