diff --git a/servers/destiny2-mcp-server/readme.md b/servers/destiny2-mcp-server/readme.md new file mode 100644 index 000000000..ade0ef542 --- /dev/null +++ b/servers/destiny2-mcp-server/readme.md @@ -0,0 +1 @@ +https://github.com/Nadiar/destiny2-mcp-server#readme diff --git a/servers/destiny2-mcp-server/server.yaml b/servers/destiny2-mcp-server/server.yaml new file mode 100644 index 000000000..18d4ece8e --- /dev/null +++ b/servers/destiny2-mcp-server/server.yaml @@ -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.google.com/s2/favicons?domain=bungie.net&sz=64 +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 diff --git a/servers/destiny2-mcp-server/tools.json b/servers/destiny2-mcp-server/tools.json new file mode 100644 index 000000000..36e6fd811 --- /dev/null +++ b/servers/destiny2-mcp-server/tools.json @@ -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 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.", + "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)" + } + ] + } +]