MGS Toolbox

Fantasy TTRPG data: metals, minerals, ingredients, potions, gems, craft rules, music catalogue.

Should I use this

Quality & Safety

A
Description quality
97%
Schema completeness
80%
Naming quality
93%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,075Tokens (tool definitions)
~1.5 KBTypical response size
Moderate attention impact (1.62% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "toolbox": {
      "url": "https://michaelghelfistudios.com/api/v1/mcp"
    }
  }
}

Remote endpoints

https://michaelghelfistudios.com/api/v1/mcpstreamable-http

What it can do

Tool inventory

Tools (12)

🟒 Read-only🟑 WriteπŸ”΄ Deleteβšͺ Unknown
🟒search_encyclopedia(q, kind, lang, limit)

Find metals, minerals, alchemical ingredients, potions and gems by name (case- and accent-insensitive; exact names first, then prefixes, then substrings, aliases included). Returns each hit with its kind, id, one-line summary and page url; call get_entry for the full data.

Input Schema

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "minLength": 1,
      "description": "The name or part of it."
    },
    "kind": {
      "type": "string",
      "description": "Restrict to some catalogues, comma-separated (e.g. \"metal,mineral\")."
    },
    "lang": {
      "type": "string",
      "enum": [
        "en",
        "fr",
        "all"
      ],
      "description": "Language of the texts: en (default), fr, or all for both."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    }
  },
  "required": [
    "q"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟒get_entry(kind, id, lang)

The full data of one metal, mineral, ingredient, potion or gem by its id (from search_encyclopedia or list_entries): properties, lore, page url, embed_url.

Input Schema

{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string",
      "enum": [
        "metal",
        "mineral",
        "ingredient",
        "potion",
        "gem"
      ],
      "description": "Which catalogue: metal, mineral, ingredient, potion or gem."
    },
    "id": {
      "type": "string",
      "description": "The entry id, e.g. \"iron\", \"rose_quartz\"."
    },
    "lang": {
      "type": "string",
      "enum": [
        "en",
        "fr",
        "all"
      ],
      "description": "Language of the texts: en (default), fr, or all for both."
    }
  },
  "required": [
    "kind",
    "id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟒list_entries(kind, filters, q, lang, limit, ...)

A page of one catalogue, filtered. Use it to answer "which minerals are cubic and gem-quality?", "legendary metals of the medieval era", "swamp ingredients with a fire essence". Combine with q for a name search inside the filter.

Input Schema

{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string",
      "enum": [
        "metal",
        "mineral",
        "ingredient",
        "potion",
        "gem"
      ],
      "description": "Which catalogue: metal, mineral, ingredient, potion or gem."
    },
    "filters": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      },
      "description": "Field filters as {name: \"value\" | \"value1,value2\"} (any-of, case-insensitive). Names per catalogue: metal β†’ category, era, rarity, fictional, tag; mineral β†’ type, system, rarity, gem_quality, color, magic, planar_origin, origin; ingredient β†’ category, rarity, environment, essence, tag; potion β†’ essence; gem β†’ color, rarity, temporary. list_facets gives the values."
    },
    "q": {
      "type": "string"
    },
    "lang": {
      "type": "string",
      "enum": [
        "en",
        "fr",
        "all"
      ],
      "description": "Language of the texts: en (default), fr, or all for both."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "offset": {
      "type": "integer",
      "minimum": 0
    }
  },
  "required": [
    "kind"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
βšͺrandom_entry(kind, filters, lang)

One entry at random among those matching the filters: loot tables, "mineral of the day", a credible metal for a blacksmith, a foraging roll.

Input Schema

{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string",
      "enum": [
        "metal",
        "mineral",
        "ingredient",
        "potion",
        "gem"
      ],
      "description": "Which catalogue: metal, mineral, ingredient, potion or gem."
    },
    "filters": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      },
      "description": "Field filters as {name: \"value\" | \"value1,value2\"} (any-of, case-insensitive). Names per catalogue: metal β†’ category, era, rarity, fictional, tag; mineral β†’ type, system, rarity, gem_quality, color, magic, planar_origin, origin; ingredient β†’ category, rarity, environment, essence, tag; potion β†’ essence; gem β†’ color, rarity, temporary. list_facets gives the values."
    },
    "lang": {
      "type": "string",
      "enum": [
        "en",
        "fr",
        "all"
      ],
      "description": "Language of the texts: en (default), fr, or all for both."
    }
  },
  "required": [
    "kind"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟒list_facets(kind)

Every distinct value of each filterable field of a catalogue (categories, rarities, crystal systems, environments, essences…) and its entry count.

Input Schema

{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string",
      "enum": [
        "metal",
        "mineral",
        "ingredient",
        "potion",
        "gem"
      ],
      "description": "Which catalogue: metal, mineral, ingredient, potion or gem."
    }
  },
  "required": [
    "kind"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
βšͺcraft_rules(lang)

The rules of the crafting system (characters, essences, extraction, brewing, gem cutting, socketing) as titled HTML sections.

Input Schema

{
  "type": "object",
  "properties": {
    "lang": {
      "type": "string",
      "enum": [
        "en",
        "fr",
        "all"
      ],
      "description": "Language of the texts: en (default), fr, or all for both."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟒search_tracks(type, genre, mood, era, keyword, ...)

Published tracks of MGS Audio (music, ambiences, sound effects) with composer, album, moods, keywords, duration and page url. Metadata only: no audio file. "A battle theme" β†’ genre: "Combat", type: "music"; "a forest ambience" β†’ type: "ambience", genre: "Forest"; "something for a dungeon" β†’ keyword: "dungeon".

Input Schema

{
  "type": "object",
  "properties": {
    "type": {
      "type": "string",
      "description": "Audio type(s), comma-separated: music, ambience, sfx…"
    },
    "genre": {
      "type": "string",
      "description": "Theme(s), comma-separated, case-insensitive: Combat, Forest, Dungeon, Taverns and Inns, Magic, Weather… (audio_taxonomy lists them)."
    },
    "mood": {
      "type": "string",
      "description": "Musical style(s), comma-separated: Orchestral, Celtic, Folk, Medieval, Metal…"
    },
    "era": {
      "type": "string",
      "description": "Era token(s), comma-separated."
    },
    "keyword": {
      "type": "string",
      "description": "Keyword(s), comma-separated, any of them."
    },
    "composer": {
      "type": "string",
      "description": "Composer id or slug."
    },
    "album": {
      "type": "string",
      "description": "Album id or slug."
    },
    "q": {
      "type": "string",
      "description": "Text search in title, description, keywords."
    },
    "duration_min": {
      "type": "number",
      "description": "Minimum duration, seconds."
    },
    "duration_max": {
      "type": "number",
      "description": "Maximum duration, seconds."
    },
    "sort": {
      "type": "string",
      "enum": [
        "newest",
        "oldest",
        "title",
        "duration",
        "random"
      ]
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "offset": {
      "type": "integer",
      "minimum": 0
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
βšͺrandom_track(type, genre, mood, era, keyword, ...)

One published track at random among those matching the filters.

Input Schema

{
  "type": "object",
  "properties": {
    "type": {
      "type": "string",
      "description": "Audio type(s), comma-separated: music, ambience, sfx…"
    },
    "genre": {
      "type": "string",
      "description": "Theme(s), comma-separated, case-insensitive: Combat, Forest, Dungeon, Taverns and Inns, Magic, Weather… (audio_taxonomy lists them)."
    },
    "mood": {
      "type": "string",
      "description": "Musical style(s), comma-separated: Orchestral, Celtic, Folk, Medieval, Metal…"
    },
    "era": {
      "type": "string",
      "description": "Era token(s), comma-separated."
    },
    "keyword": {
      "type": "string",
      "description": "Keyword(s), comma-separated, any of them."
    },
    "composer": {
      "type": "string",
      "description": "Composer id or slug."
    },
    "album": {
      "type": "string",
      "description": "Album id or slug."
    },
    "q": {
      "type": "string",
      "description": "Text search in title, description, keywords."
    },
    "duration_min": {
      "type": "number",
      "description": "Minimum duration, seconds."
    },
    "duration_max": {
      "type": "number",
      "description": "Maximum duration, seconds."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟒get_track(id)

One track by id or slug, with its published alternative versions.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟒list_composers

Every composer with published tracks, most prolific first, with their page url.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟒list_albums(limit, offset)

Published albums with track count, page url and an embeddable player url.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "offset": {
      "type": "integer",
      "minimum": 0
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
βšͺaudio_taxonomy

The vocabulary of the track filters: every genre, mood, era and keyword in use.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded12 tools
verifiedversion not recorded12 tools
verifiedversion not recorded12 tools