Skip to main content
Glama

get_system_combat_stats

Retrieve raw combat statistics for a specific EVE Online solar system using its numeric ID, including recent killmails and ship/pod kills. Provides unprocessed data for analysis and decision-making.

Instructions

Get raw combat statistics for a solar system by system ID including ESI pod/ship kills (1-hour and 12-hour) and recent killmails from EVE-KILL. Returns unprocessed data without analysis. Requires numeric system ID (use solar_system_name_to_id tool to convert system names to IDs).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
system_idYesThe solar system ID to get combat statistics for. Use numeric ID only, not name. Use solar_system_name_to_id tool to convert names to IDs first.

Implementation Reference

  • Full implementation of the getSystemCombatStatsTool including the execute handler function that fetches ESI kill/jump stats and recent player killmails from EVE-KILL for a given system ID.
    export const getSystemCombatStatsTool = {
      annotations: {
        openWorldHint: true, // This tool interacts with external APIs
        readOnlyHint: true, // This tool doesn't modify anything
        title: "Get System Combat Statistics",
      },
      description: "Get raw combat statistics for a solar system by system ID including ESI pod/ship kills (1-hour and 12-hour) and recent killmails from EVE-KILL. Returns unprocessed data without analysis. Requires numeric system ID (use solar_system_name_to_id tool to convert system names to IDs).",
      execute: async (args: { system_id: number }) => {
        try {
          // Get system name
          const systemInfo = await esiClient.getSolarSystemInfo(args.system_id);
          
          // Get ESI kills data (1-hour statistics)
          const esiKills = await esiClient.getSystemKillsById(args.system_id);
          
          // Get ESI jumps data (12-hour statistics) 
          const esiJumps = await esiClient.getSystemJumpsById(args.system_id);
          
          // Get recent killmails from EVE-KILL
          const killmails = await esiClient.getSystemKillmails(args.system_id, 100);
          
          // Filter only player kills (exclude NPC kills)
          const playerKillmails = killmails.filter(km => !km.is_npc);
          
          return JSON.stringify({
            success: true,
            system_id: args.system_id,
            system_name: systemInfo.name,
            esi_statistics: {
              one_hour: {
                description: "ESI statistics for the current hour",
                pod_kills: esiKills?.pod_kills || 0,
                ship_kills: esiKills?.ship_kills || 0,
                timestamp: new Date().toISOString()
              },
              twelve_hour: {
                description: "ESI statistics for the last 12 hours", 
                ship_jumps: esiJumps?.ship_jumps || 0,
                timestamp: new Date().toISOString()
              }
            },
            recent_killmails: playerKillmails.map(km => ({
              killmail_id: km.killmail_id,
              kill_time: km.kill_time,
              total_value: km.total_value,
              system_security: km.system_security,
              victim: {
                character_id: km.victim.character_id,
                character_name: km.victim.character_name,
                corporation_id: km.victim.corporation_id,
                corporation_name: km.victim.corporation_name,
                alliance_id: km.victim.alliance_id,
                alliance_name: km.victim.alliance_name,
                ship_id: km.victim.ship_id,
                ship_name: km.victim.ship_name
              },
              finalblow: {
                character_id: km.finalblow.character_id,
                character_name: km.finalblow.character_name,
                corporation_id: km.finalblow.corporation_id,
                corporation_name: km.finalblow.corporation_name,
                alliance_id: km.finalblow.alliance_id,
                alliance_name: km.finalblow.alliance_name
              },
              attacker_count: km.attackerCount,
              is_solo_kill: km.is_solo
            }))
          }, null, 2);
        } catch (error) {
          return JSON.stringify({
            success: false,
            error: error instanceof Error ? error.message : 'Unknown error occurred',
            system_id: args.system_id
          }, null, 2);
        }
      },
      name: "get_system_combat_stats",
      parameters: z.object({
        system_id: z.number().int().positive().describe("The solar system ID to get combat statistics for. Use numeric ID only, not name. Use solar_system_name_to_id tool to convert names to IDs first.")
      }),
    } as const;
  • Zod input schema defining the required system_id parameter (positive integer).
    parameters: z.object({
      system_id: z.number().int().positive().describe("The solar system ID to get combat statistics for. Use numeric ID only, not name. Use solar_system_name_to_id tool to convert names to IDs first.")
    }),
  • src/server.ts:23-25 (registration)
    Import statement for getSystemCombatStatsTool from combat-stats-tools.js
    import {
      getSystemCombatStatsTool
    } from "./combat-stats-tools.js";
  • src/server.ts:66-66 (registration)
    Registration of the get_system_combat_stats tool using server.addTool() in the FastMCP server.
    server.addTool(getSystemCombatStatsTool);

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/kongyo2/eve-online-traffic-mcp'

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