Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions servers/destiny2-mcp-server/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
https://github.com/Nadiar/destiny2-mcp-server#readme
28 changes: 28 additions & 0 deletions servers/destiny2-mcp-server/server.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: destiny2-mcp-server
image: ghcr.io/nadiar/destiny2-mcp-server:latest
type: server
meta:
category: gaming
tags:
- gaming
- destiny2
- bungie
- api
about:
title: Destiny 2 MCP Server
description: MCP server for Destiny 2 API integration. Search players, look up items and perks, get activity history, clan rosters, and more. Features fuzzy player search with confidence scoring, cross-save detection, and day-one raid tracking.
icon: https://www.bungie.net/7/ca/destiny/icons/icon_d2_social.png
source:
project: https://github.com/Nadiar/destiny2-mcp-server
commit: 4c1730de63e5ec54f22b23c651548edb9031f538
run:
allowHosts:
- www.bungie.net:443
- stats.bungie.net:443
config:
description: Configure the Bungie API connection for Destiny 2 data
secrets:
- name: destiny2-mcp-server.api_key
env: BUNGIE_API_KEY
example: YOUR_BUNGIE_API_KEY_HERE
description: Get your API key from https://www.bungie.net/en/Application
272 changes: 272 additions & 0 deletions servers/destiny2-mcp-server/tools.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,272 @@
[
{
"name": "search_player",
"description": "EXACT MATCH ONLY: Search for a Destiny 2 player when you have their complete Bungie Name with code (e.g., \"Guardian#1234\"). If you only have a partial name or don't know the #code, use find_players instead which does fuzzy matching.",
"arguments": [
{
"name": "bungieName",
"type": "string",
"desc": "Complete Bungie Name in format \"DisplayName#Code\" (e.g., \"Datto#6446\", \"ATP#6173\"). IMPORTANT: You must have the exact 4-digit code. If you don't know the code, use find_players tool instead for fuzzy search."
}
]
},
{
"name": "find_players",
"description": "Fuzzy search for Destiny 2 players by partial name. Returns multiple matches sorted by confidence (0-100+), with cross-save primary account detection. Confidence weighs: recency (25%), playtime (25%), lifetime triumphs (15%), active triumphs (15%), clan (10%), plus bonuses for day-one raid clears and elite clan status.",
Copy link

Copilot AI Dec 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The phrase "Confidence weighs:" is grammatically incorrect. The verb "weighs" requires an object. Consider changing to "Confidence weights:" (noun) or "Confidence is weighted by:" for clarity.

Suggested change
"description": "Fuzzy search for Destiny 2 players by partial name. Returns multiple matches sorted by confidence (0-100+), with cross-save primary account detection. Confidence weighs: recency (25%), playtime (25%), lifetime triumphs (15%), active triumphs (15%), clan (10%), plus bonuses for day-one raid clears and elite clan status.",
"description": "Fuzzy search for Destiny 2 players by partial name. Returns multiple matches sorted by confidence (0-100+), with cross-save primary account detection. Confidence is weighted by: recency (25%), playtime (25%), lifetime triumphs (15%), active triumphs (15%), clan (10%), plus bonuses for day-one raid clears and elite clan status.",

Copilot uses AI. Check for mistakes.
"arguments": [
{
"name": "namePrefix",
"type": "string",
"desc": "ANY part of player name to search for - just type what you know (e.g., \"Datto\" finds \"Datto#6446\", \"ATP\" finds \"ATP#6173\"). Does NOT require the #code. Case-insensitive fuzzy matching."
}
]
},
{
"name": "get_profile",
"description": "Get a Destiny 2 player profile with characters, clan, triumph score, and account info",
"arguments": [
{
"name": "membershipType",
"type": "number",
"desc": "Platform type (1=Xbox, 2=PS, 3=Steam, 6=Epic)"
},
{
"name": "membershipId",
"type": "string",
"desc": "Destiny membership ID"
}
]
},
{
"name": "get_character",
"description": "Get detailed information about a specific Destiny 2 character",
"arguments": [
{
"name": "membershipType",
"type": "number",
"desc": "Platform type"
},
{
"name": "membershipId",
"type": "string",
"desc": "Destiny membership ID"
},
{
"name": "characterId",
"type": "string",
"desc": "Character ID"
}
]
},
{
"name": "get_activity_history",
"description": "Get recent activity history for a character with resolved activity names and time played. Includes completion status, kills, deaths, and assists per activity.",
"arguments": [
{
"name": "membershipType",
"type": "number",
"desc": "Platform type"
},
{
"name": "membershipId",
"type": "string",
"desc": "Destiny membership ID"
},
{
"name": "characterId",
"type": "string",
"desc": "Character ID"
},
{
"name": "mode",
"type": "number",
"desc": "Activity mode (0=All, 4=Raid, 5=PvP, 82=Dungeon)"
},
{
"name": "count",
"type": "number",
"desc": "Number of activities to return (default: 10)"
}
]
},
{
"name": "get_activity_stats",
"description": "Get aggregated activity statistics with customizable fields and pagination. Can fetch beyond 250 activities by using multiple pages. Perfect for calculating total time spent in specific activities.",
"arguments": [
{
"name": "membershipType",
"type": "number",
"desc": "Platform type (1=Xbox, 2=PS, 3=Steam, 6=Epic)"
},
{
"name": "membershipId",
"type": "string",
"desc": "Destiny membership ID"
},
{
"name": "characterId",
"type": "string",
"desc": "Character ID"
},
{
"name": "mode",
"type": "number",
"desc": "Activity mode filter (0=All, 4=Raid, 5=PvP, 82=Dungeon, 46=Nightfall)"
},
{
"name": "activityHash",
"type": "number",
"desc": "Filter to specific activity by hash"
},
{
"name": "maxActivities",
"type": "number",
"desc": "Maximum activities to fetch (default: 250, max: 1000)"
},
{
"name": "fields",
"type": "array",
"desc": "Which stats to include: time, completions, kills, deaths, kd, efficiency"
},
{
"name": "groupBy",
"type": "string",
"desc": "Group results by activity name or return flat totals"
}
]
},
{
"name": "get_pgcr",
"description": "Get a Post-Game Carnage Report for a specific activity with resolved names",
"arguments": [
{
"name": "activityId",
"type": "string",
"desc": "Activity instance ID"
}
]
},
{
"name": "get_manifest",
"description": "Get the current Destiny 2 manifest version and paths",
"arguments": []
},
{
"name": "get_item_definition",
"description": "Look up an item definition from the Destiny 2 manifest",
"arguments": [
{
"name": "itemHash",
"type": "number",
"desc": "Item hash identifier (0-4294967295)"
}
]
},
{
"name": "get_historical_stats",
"description": "Get historical stats for a player account",
"arguments": [
{
"name": "membershipType",
"type": "number",
"desc": "Platform type"
},
{
"name": "membershipId",
"type": "string",
"desc": "Destiny membership ID"
},
{
"name": "characterId",
"type": "string",
"desc": "Character ID (optional, use 0 for account-wide)"
}
]
},
{
"name": "search_items",
"description": "Search for Destiny 2 items by name using the local manifest cache. Returns matching weapons, armor, mods, and other items.",
"arguments": [
{
"name": "searchTerm",
"type": "string",
"desc": "Name to search for (e.g., \"Fatebringer\", \"Navigator\", \"Sunshot\")"
},
{
"name": "limit",
"type": "number",
"desc": "Maximum results to return (default 15)"
}
]
},
{
"name": "get_item_image",
"description": "Get the icon or screenshot for a Destiny 2 item. By default returns the large screenshot if available, or falls back to the small icon.",
"arguments": [
{
"name": "itemHash",
"type": "number",
"desc": "Item hash from search_items (0-4294967295)"
},
{
"name": "imageType",
"type": "string",
"desc": "Type of image: \"screenshot\" (large), \"icon\" (small), or \"auto\" (default)"
}
]
},
{
"name": "get_item_details",
"description": "Get full details for an item including name, type, stats, and sockets/perks with resolved perk names",
"arguments": [
{
"name": "itemHash",
"type": "number",
"desc": "Item hash from search_items (0-4294967295)"
}
]
},
{
"name": "get_plug_set",
"description": "Get all perks in a plug set with resolved names - use plugSetHash from item sockets",
"arguments": [
{
"name": "plugSetHash",
"type": "number",
"desc": "Plug set hash from item socket definition (0-4294967295)"
}
]
},
{
"name": "get_activity_definition",
"description": "Get details about an activity by hash with resolved name (raids, strikes, dungeons, etc.)",
"arguments": [
{
"name": "activityHash",
"type": "number",
"desc": "Activity hash from activity history (0-4294967295)"
}
]
},
{
"name": "search_clan_members",
"description": "Get the full roster of a Destiny 2 clan. Two methods: 1) Search by clan name/tag, or 2) RECOMMENDED: Use knownMember with any clan member's ID to reliably get the roster.",
"arguments": [
{
"name": "clanName",
"type": "string",
"desc": "Clan name or tag to search for (optional if using knownMember)"
},
{
"name": "knownMember",
"type": "object",
"desc": "Object with membershipType and membershipId of any clan member (recommended method)"
},
{
"name": "maxResults",
"type": "number",
"desc": "Maximum number of members to return (default: 50, max: 100)"
}
]
}
]