ksp-mods-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CKAN_DB | No | Override the default database path (~/.local/share/ksp-mods-mcp/ckan.db on Linux, AppData/Local/ksp-mods-mcp/ckan.db on Windows). | |
| CKAN_DOWNLOAD_CACHE | No | Override the default CKAN download cache directory (%LOCALAPPDATA%/CKAN/downloads on Windows, $XDG_DATA_HOME/CKAN/downloads on Linux). |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_mods_toolA | Search KSP mods by name, author, tags, and/or KSP version compatibility, paginated. Args: name: Case-insensitive regex matched against mod identifier and display name. Examples: "engineer", "^MechJeb", "visual|scatter" author: Case-insensitive regex matched against mod author(s). A mod matches if any of its authors match. Examples: "sarbian", "squad|nertea" tags: List of tags to filter by. Examples: ["plugin"], ["parts", "resources"] tags_mode: How to combine multiple tags — "and" (mod must have all tags, default) or "or" (mod must have at least one tag). ksp_versions: KSP game versions to filter by. A mod matches if any of its released versions supports at least one of the given KSP versions. Uses prefix matching, so "1.12" matches "1.12.0", "1.12.5", etc. Examples: ["1.12"], ["1.11", "1.12"] sort_by: Sort order — "downloads" (default), "downloads asc", "name", "name desc", "download_size", "download_size asc", "install_size", "install_size asc", "updated", "updated asc". cached_only: If True, only return mods whose ZIP is present in the local CKAN download cache. Requires CKAN to have been used to download mods. limit: Number of results per page (default 20, max 100). offset: Pagination offset (default 0). Returns JSON with keys: total, offset, limit, results. Each result has: identifier, name, abstract, tags, authors, max_ksp_version, latest_version, last_updated_at, download_count, download_size (bytes), install_size (bytes). Results include is_cached: true only for mods present in the CKAN download cache. |
| get_mod_toolA | Get details for a KSP mod by its CKAN identifier. Args: identifier: Exact CKAN identifier (e.g. "MechJeb2", "Trajectories"). Use search_mods to find identifiers first. categories: Which detail categories to include. Defaults to ["metadata"]. Available categories: - "metadata": name, abstract, authors, tags, license, version info (max_ksp_version, latest_version, last_updated_at), download_count, resources - "relations": depends, recommends, suggests, conflicts, provides - "install": install directives - "versions": full version history with per-version KSP compatibility - "github": GitHub repo stats, README preview, and latest release. Lazily fetched and cached (TTL 7 days). Includes fetched_at timestamp. - "spacedock": SpaceDock stats, descriptions, and latest version info. Lazily fetched and cached (TTL 3 days). Includes fetched_at timestamp. - "raw": full raw CKAN JSON (superset of all above) force_refresh: If True, bypass the cache TTL and re-fetch all requested enrichment categories (github, spacedock) from their sources. Returns an error object if the mod is not found. Metadata results include is_cached: true if the mod's ZIP is in the CKAN download cache. |
| get_recommendations_toolA | Get mods related to a given list of mods via CKAN dependency/recommendation relationships. For each result, shows the same fields as search_mods plus the relationship category and which input mods it was found through. If the same mod appears via multiple input mods or multiple relationship types, it is deduplicated: the highest-priority category wins, and all source mods are listed. Args: identifiers: List of CKAN mod identifiers to find recommendations for. Use search_mods to find identifiers first. categories: Which relationship categories to include. Defaults to ["depends", "recommends", "suggests"]. Available categories (in priority order): - "depends": mods that the input mods depend on - "supports": mods that the input mods declare support for - "recommends": mods recommended by the input mods - "suggests": mods suggested by the input mods - "depends_by": mods that depend on any of the input mods - "supported_by": mods that declare support for any of the input mods - "recommended_by": mods that recommend any of the input mods - "suggested_by": mods that suggest any of the input mods Pass ["all"] to include all categories. limit: Number of results per page (default 20, max 100). offset: Pagination offset (default 0). Returns JSON with keys: total, offset, limit, results. Each result has: identifier, name, abstract, tags, authors, max_ksp_version, latest_version, last_updated_at, download_count, download_size, install_size, category, related_mods. |
| list_tags_toolA | List all tags used in the CKAN mod index, with mod counts. Args: limit: Maximum number of tags to return, ordered by popularity (default 50). Returns JSON list of {tag, count} objects. |
| index_statusA | Return current status of the CKAN mod index. Reports total mod count, number with download data, number with tags, and when the index was last harvested. |
| list_parts_toolA | List the KSP parts included in a mod's cached download ZIP. Only works for mods whose ZIP is present in the local CKAN download cache (i.e., mods you have downloaded via CKAN). Use index_status to check whether ckan_cache_available is true, and search_mods with cached_only=true to find mods that are cached. Parts are scanned from GameData/{identifier}/Parts/**/*.cfg inside the ZIP. Bundled dependencies under other GameData/ subdirectories are ignored. Titles are resolved from the mod's English localization file where available. Args: identifier: Exact CKAN mod identifier (e.g. "HeatControl", "NearFuturePropulsion"). detail: Level of detail to return: - "summary": total part count and breakdown by category (cheapest) - "basic": per-part name, resolved title, and category (default) - "long": basic + cost, mass, tech_required, bulkhead_profiles, modules (list of supported module type names), unsupported_modules (list of unsupported module type names), resources (list of resource names). Use get_part_tool for full module and resource detail. Returns JSON. On success: summary: {total_parts, categories: {CategoryName: count}} basic/long: {total_parts, categories, parts: [...]} Returns an error object if the mod is not cached or the ZIP cannot be read. |
| get_part_toolA | Get full details for a single KSP part from a mod's cached download ZIP. Returns structured part data including formatted stats for all supported modules (engines, RCS, reaction wheels, solar panels, etc.) and a list of unsupported module names. Use list_parts_tool with detail="basic" first to get valid part names. Only works for mods present in the local CKAN download cache. Args: identifier: Exact CKAN mod identifier (e.g. "CryoEngines"). part_name: Internal part name as it appears in the CFG file (e.g. "cryoengine-stromboli-1"). This is the "name" field, not the display title. Use list_parts_tool to find it. Returns a part object with: name, title, category, cost, mass, tech_required, bulkhead_profiles, modules (list of formatted module data per supported module type), unsupported_modules (list of module type names with no formatter), resources (list of {name, amount, max_amount}). Returns an error object if the mod is not cached, the ZIP cannot be read, or the part name is not found. |
| refresh_indexA | Re-harvest the CKAN-meta archive to update the mod index. By default, this is a no-op if nothing has changed upstream (ETag check). Use force=True to bypass the check and rebuild unconditionally. Args: force: Bypass ETag check and re-download/re-index everything. Returns JSON with harvest result: status ("skipped" or "updated") and stats. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 8 tools
Each tool maps to a distinct operation: searching, fetching a mod, getting recommendations, listing tags/parts, getting part details, checking status, or refreshing the index. The only related pair is list_parts_tool/get_part_tool, but their descriptions clearly separate summary/basic listing from full part detail. No two tools appear to do the same thing.
Most tools follow a verb_noun_tool pattern (search_mods_tool, get_mod_tool, list_tags_tool, list_parts_tool, get_part_tool). Two tools, index_status and refresh_index, deviate by omitting the _tool suffix, and index_status is a noun phrase rather than a verb phrase. Still, all names are snake_case and readable.
Eight tools is an appropriate size for a KSP mod metadata and part-inspection server. Each tool has a clear role, with no bloated or redundant surface. The scope is substantial but easy to navigate.
The server covers mod discovery, detailed metadata and relationships, recommendations, tag taxonomy, and inspection of cached mod ZIPs and parts. It also provides index maintenance via refresh_index and cache awareness via index_status and cached_only search. For a read-only CKAN-based mod server, the tool set is essentially complete.