Skip to main content
Glama

facility

Read-onlyIdempotent

Manage facilities at stations (production, faction, personal, sales, and more) (Actions: types, build, list, owned, upgrades, upgrade, dismantle, repair, faction_build, faction_dismantle, faction_upgrade, faction_list, faction_owned, transfer, personal_build, personal_decorate, personal_visit, list_for_sale, browse_for_sale, buy_listing, cancel_listing, job_add, job_list, job_cancel, job_reorder, set_output_price, set_access, set_name, set_description, ranch_status, ranch_set_cull. Call with no action or action 'help' for full documentation.

WILDLIFE RANCH: build a ranch on your faction's outpost at a habitat POI (faction_build, facility_type=wildlife_corral, species=; needs Xenobiology and a live wild population — survey_system shows what lives where). Keep faction storage at the outpost stocked with the workers' supplies and the species' diet resource: the local wildlife domesticates into your branded herd, breeds, and yields diet secretions plus a managed cull (ranch_set_cull with cull_target) into faction storage each cycle. Mining the anchor POI's diet nodes shrinks your own range. Branded animals remain huntable by anyone — you are notified who shot them.

DISMANTLE: 'dismantle' (facility_id) packages 100% of every build material across the facility's full upgrade chain after the cumulative build time, one package group per tier; 'faction_dismantle' does the same for faction facilities (needs ManageFacilities). Costs one cargo_container per package produced. The facility goes offline immediately and is removed when done. Move and unpack the resulting packages normally, OR pass their package_ids straight to 'build'/'upgrade'/'faction_build'/'faction_upgrade' to source materials directly from them — each package must contain exactly what that action still needs of an item (no more) or it's rejected up front. Credits are not refunded, and the normal credit/skill requirements still apply. Personal Quarters can be dismantled after your other personal facilities here are gone; Faction Storage after your faction's other facilities here are gone, including ones still dismantling. Remaining faction items and dismantling packages stay available to view and withdraw with the usual permissions, but new deposits stop when storage dismantling starts unless your faction owns the station (which grants storage independently). Outpost built-in storage and fuel require 'dismantle_outpost'. Damaged facilities can be dismantled without repairing them first. Starting dismantling cancels any in-progress repair; repair costs already spent are not refunded.

FACTION SHIP GARAGE: build a faction_ship_garage (faction_build; holds 20 ships, upgrades to faction_ship_hangar=50 then faction_fleet_yard=100) to give your faction a shared fleet pool at a station. Gift a ship to your faction to store it; switch_ship to a pooled ship while docked there to claim it; list_ships shows the garage at your current station, faction_garages the whole roster, and get_ship ship_id= a pooled ship's fit before you travel to claim it.

REPAIR: 'repair' (facility_id) restores a facility damaged when its station was wrecked, costing 30% of its original build materials and 30% of its build time, finishing on the next station maintenance cycle. Use 'owned' and 'faction_owned' for cross-station facility and rent views. Production jobs use job_add/job_list/job_cancel/job_reorder; set_access and set_output_price control rentals; set_name and set_description customize owned facilities. PACKAGE JOBS: job_add also runs pack_package with items, label, source, and target, or unpack_package with package_id, source, and target. Logistics rental pricing is per-operation for package jobs rather than per produced item.)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameNoFilter for 'types' action: case-insensitive name search (e.g. 'refinery').
pageNoPage number for 'types' action results (default: 1).
itemsNoFor job_add pack_package: selected manifest items.
labelNoFor job_add pack_package: player label.
levelNoFilter for 'types' action: show only this tier level (1, 2, 3, etc.).
priceNoFor 'list_for_sale': asking price in whole credits. For 'set_output_price': per-produced-unit rental price on ordinary production, or a once-per-package-operation price on Logistics. May be fractional; used literally, so 0 rents for free and negative is rejected.
accessNoFor 'personal_decorate': who can visit your quarters. For 'set_access': 'public' opens your facility to renters, 'private' closes it.
actionYesThe facility action to perform. Use 'help' or omit to see all actions with examples.
bucketNoFor 'faction_build'/'faction_upgrade': a Storage Extension bucket (name or id) to source build/upgrade MATERIALS from, instead of the faction main store. Ship cargo backfills either way.
job_idNoJob ID (for 'job_cancel', 'job_reorder'). Use action 'job_list' to see job IDs.
sourceNoInput source for 'job_add': where inputs/credits are pulled from. Same values as deliver_to; defaults to deliver_to.
targetNoPackage job_add output destination; defaults to source.
factionNoFor 'list_for_sale': set true to list a faction-owned facility (requires manage_facilities permission).
job_idsNoFor 'job_cancel': cancel multiple jobs in a single action. When provided, 'job_id' is ignored. Use action 'job_list' to see job IDs.
speciesNoFor 'faction_build' of a ranch facility: the grazer species to ranch (fixed for the facility's life). survey_system shows what lives in the system.
categoryNoFilter for 'types' action: show only this category.
per_pageNoResults per page for 'types' action (default: 20, max: 50).
positionNoNew queue position for 'job_reorder' (1-based).
quantityNoFor 'job_add': number of runs to queue.
usernameNoFor 'personal_visit': username of the player whose quarters to visit. Omit to visit your own.
directionNoTransfer direction for 'transfer' action ('to_faction' or 'to_player'), or job direction for 'job_add' ('forward' or 'reverse').
max_priceNoFor 'browse_for_sale': optional maximum price filter.
player_idNoTarget player ID for 'transfer' action with direction 'to_player'.
recipe_idNoRecipe ID to run (for 'job_add' action).
deliver_toNoOutput destination for 'job_add': 'storage' (default), 'faction' (faction main store), or 'faction:<bucket name or id>' for a Storage Extension bucket.
listing_idNoFor 'buy_listing' and 'cancel_listing': the facility listing ID. Use action 'browse_for_sale' to see listings.
package_idNoFor job_add unpack_package: package ID.
session_idYesYour session ID from login/register
cull_targetNoFor 'ranch_set_cull': maintain the herd at this size — surplus is slaughtered each cycle into faction storage. 0 disables culling.
custom_nameNoFor 'set_name': a custom name for the facility (3-32 chars) so multiple facilities of the same type stand out. Send empty to clear it.
descriptionNoFor 'personal_decorate': a text description of your personal quarters (what visitors see, hear, and feel). For 'set_description': a custom description (max 4000 chars) for any facility you own, overriding its default flavor text — e.g. re-flavoring your faction's bar. Send empty to clear it.
facility_idNoFacility instance ID (required for 'upgrade', 'dismantle', 'faction_dismantle', 'job_add', 'job_list', 'set_output_price', 'set_access', 'set_name', 'set_description' actions). Use action 'list' to see facility IDs.
package_idsNoFor 'build'/'upgrade'/'faction_build'/'faction_upgrade': source materials directly from these packages instead of unpacking them into storage first. Each package must contain exactly what this build/upgrade still needs of an item — no more — or the action is rejected before anything is touched. Storage and cargo still backfill any shortfall.
facility_typeNoFacility type ID. For 'types' action: get full details for this specific type. For 'build'/'upgrade': the type to build/upgrade to.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed27 schema fields changed
    • changedInput schema / properties / access / description
      Previous value: -"For 'personal_decorate': who can visit your quarters."New value: +"For 'personal_decorate': who can visit your quarters. For 'set_access': 'public' opens your facility to renters, 'private' closes it."
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "types",
      -  "build",
      -  "list",
      -  "toggle",
      -  "upgrades",
      -  "upgrade",
      -  "faction_build",
      -  "faction_upgrade",
      -  "faction_list",
      -  "faction_toggle",
      -  "transfer",
      -  "personal_build",
      -  "personal_decorate",
      -  "personal_visit",
      -  "help"
      -]New value: +[
      +  "types",
      +  "build",
      +  "list",
      +  "owned",
      +  "upgrades",
      +  "upgrade",
      +  "dismantle",
      +  "repair",
      +  "faction_build",
      +  "faction_dismantle",
      +  "faction_upgrade",
      +  "faction_list",
      +  "faction_owned",
      +  "transfer",
      +  "personal_build",
      +  "personal_decorate",
      +  "personal_visit",
      +  "list_for_sale",
      +  "browse_for_sale",
      +  "buy_listing",
      +  "cancel_listing",
      +  "job_add",
      +  "job_list",
      +  "job_cancel",
      +  "job_reorder",
      +  "set_output_price",
      +  "set_access",
      +  "set_name",
      +  "set_description",
      +  "ranch_status",
      +  "ranch_set_cull",
      +  "help"
      +]
    • addedInput schema / properties / bucket
      Added value: +{
      +  "description": "For 'faction_build'/'faction_upgrade': a Storage Extension bucket (name or id) to source build/upgrade MATERIALS from, instead of the faction main store. Ship cargo backfills either way.",
      +  "type": "string"
      +}
    • changedInput schema / properties / category / enum
      Previous value: -[
      -  "infrastructure",
      -  "service",
      -  "production",
      -  "faction"
      -]New value: +[
      +  "infrastructure",
      +  "service",
      +  "production",
      +  "faction",
      +  "personal"
      +]
    • addedInput schema / properties / cull_target
      Added value: +{
      +  "description": "For 'ranch_set_cull': maintain the herd at this size — surplus is slaughtered each cycle into faction storage. 0 disables culling.",
      +  "type": "integer"
      +}
    • addedInput schema / properties / custom_name
      Added value: +{
      +  "description": "For 'set_name': a custom name for the facility (3-32 chars) so multiple facilities of the same type stand out. Send empty to clear it.",
      +  "type": "string"
      +}
    • addedInput schema / properties / deliver_to
      Added value: +{
      +  "description": "Output destination for 'job_add': 'storage' (default), 'faction' (faction main store), or 'faction:<bucket name or id>' for a Storage Extension bucket.",
      +  "type": "string"
      +}
    • changedInput schema / properties / description / description
      Previous value: -"For 'personal_decorate': a text description of your personal quarters (what visitors see, hear, and feel)."New value: +"For 'personal_decorate': a text description of your personal quarters (what visitors see, hear, and feel). For 'set_description': a custom description (max 4000 chars) for any facility you own, overriding its default flavor text — e.g. re-flavoring your faction's bar. Send empty to clear it."
    • changedInput schema / properties / direction / description
      Previous value: -"Transfer direction for 'transfer' action: 'to_faction' or 'to_player'."New value: +"Transfer direction for 'transfer' action ('to_faction' or 'to_player'), or job direction for 'job_add' ('forward' or 'reverse')."
    • changedInput schema / properties / direction / enum
      Previous value: -[
      -  "to_faction",
      -  "to_player"
      -]New value: +[
      +  "to_faction",
      +  "to_player",
      +  "forward",
      +  "reverse"
      +]
    • changedInput schema / properties / facility_id / description
      Previous value: -"Facility instance ID (required for 'toggle' and 'upgrade' actions). Use action 'list' to see facility IDs."New value: +"Facility instance ID (required for 'upgrade', 'dismantle', 'faction_dismantle', 'job_add', 'job_list', 'set_output_price', 'set_access', 'set_name', 'set_description' actions). Use action 'list' to see facility IDs."
    • addedInput schema / properties / faction
      Added value: +{
      +  "description": "For 'list_for_sale': set true to list a faction-owned facility (requires manage_facilities permission).",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / items
      Added value: +{
      +  "description": "For job_add pack_package: selected manifest items.",
      +  "items": {
      +    "properties": {
      +      "item_id": {
      +        "type": "string"
      +      },
      +      "quantity": {
      +        "minimum": 1,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "item_id",
      +      "quantity"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / job_id
      Added value: +{
      +  "description": "Job ID (for 'job_cancel', 'job_reorder'). Use action 'job_list' to see job IDs.",
      +  "type": "string"
      +}
    • addedInput schema / properties / job_ids
      Added value: +{
      +  "description": "For 'job_cancel': cancel multiple jobs in a single action. When provided, 'job_id' is ignored. Use action 'job_list' to see job IDs.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / label
      Added value: +{
      +  "description": "For job_add pack_package: player label.",
      +  "maxLength": 255,
      +  "type": "string"
      +}
    • addedInput schema / properties / listing_id
      Added value: +{
      +  "description": "For 'buy_listing' and 'cancel_listing': the facility listing ID. Use action 'browse_for_sale' to see listings.",
      +  "type": "string"
      +}
    • addedInput schema / properties / max_price
      Added value: +{
      +  "description": "For 'browse_for_sale': optional maximum price filter.",
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / package_id
      Added value: +{
      +  "description": "For job_add unpack_package: package ID.",
      +  "type": "string"
      +}
    • addedInput schema / properties / package_ids
      Added value: +{
      +  "description": "For 'build'/'upgrade'/'faction_build'/'faction_upgrade': source materials directly from these packages instead of unpacking them into storage first. Each package must contain exactly what this build/upgrade still needs of an item — no more — or the action is rejected before anything is touched. Storage and cargo still backfill any shortfall.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / position
      Added value: +{
      +  "description": "New queue position for 'job_reorder' (1-based).",
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / price
      Added value: +{
      +  "description": "For 'list_for_sale': asking price in whole credits. For 'set_output_price': per-produced-unit rental price on ordinary production, or a once-per-package-operation price on Logistics. May be fractional; used literally, so 0 rents for free and negative is rejected.",
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / quantity
      Added value: +{
      +  "description": "For 'job_add': number of runs to queue.",
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / recipe_id
      Added value: +{
      +  "description": "Recipe ID to run (for 'job_add' action).",
      +  "type": "string"
      +}
    • addedInput schema / properties / source
      Added value: +{
      +  "description": "Input source for 'job_add': where inputs/credits are pulled from. Same values as deliver_to; defaults to deliver_to.",
      +  "type": "string"
      +}
    • addedInput schema / properties / species
      Added value: +{
      +  "description": "For 'faction_build' of a ranch facility: the grazer species to ranch (fixed for the facility's life). survey_system shows what lives in the system.",
      +  "type": "string"
      +}
    • addedInput schema / properties / target
      Added value: +{
      +  "description": "Package job_add output destination; defaults to source.",
      +  "type": "string"
      +}
  2. Changed1 schema field changed
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "types",
      -  "build",
      -  "list",
      -  "toggle",
      -  "upgrades",
      -  "upgrade",
      -  "faction_build",
      -  "faction_upgrade",
      -  "faction_list",
      -  "transfer",
      -  "personal_build",
      -  "personal_decorate",
      -  "personal_visit",
      -  "help"
      -]New value: +[
      +  "types",
      +  "build",
      +  "list",
      +  "toggle",
      +  "upgrades",
      +  "upgrade",
      +  "faction_build",
      +  "faction_upgrade",
      +  "faction_list",
      +  "faction_toggle",
      +  "transfer",
      +  "personal_build",
      +  "personal_decorate",
      +  "personal_visit",
      +  "help"
      +]
  3. Changed1 schema field changed
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "types",
      -  "build",
      -  "list",
      -  "toggle",
      -  "upgrades",
      -  "upgrade",
      -  "faction_build",
      -  "faction_list",
      -  "transfer",
      -  "personal_build",
      -  "personal_decorate",
      -  "personal_visit",
      -  "help"
      -]New value: +[
      +  "types",
      +  "build",
      +  "list",
      +  "toggle",
      +  "upgrades",
      +  "upgrade",
      +  "faction_build",
      +  "faction_upgrade",
      +  "faction_list",
      +  "transfer",
      +  "personal_build",
      +  "personal_decorate",
      +  "personal_visit",
      +  "help"
      +]
  4. First observed

TDQS

B3.4/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and idempotentHint=true, but the description details many mutating, non-idempotent behaviors: dismantle physically removes facilities and consumes cargo containers, repairs change facility state, builds create facilities, and listing/buying transfers ownership. The rich behavioral details (e.g., 100% material packages, repair not refunded) are valuable, but they directly contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but deliberately structured into labeled sections (WILDLIFE RANCH, DISMANTLE, FACTION SHIP GARAGE, REPAIR, PACKAGE JOBS) and front-loads the action list. Given 31 actions and 34 parameters, the length is largely justified; some flavor sentences could be trimmed, but the major behavioral caveats earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the highest-risk sub-flows (dismantle, repair, ranching, faction ship garages, package jobs) and points to the 'help' action for full documentation. However, many other actions (types, upgrades, list_for_sale, browse_for_sale, buy_listing, transfer, personal_decorate, etc.) receive no behavior-level explanation, and with no output schema the agent must infer return behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all 34 parameters at 100% coverage, providing the baseline. The description adds operation-specific meaning beyond the schema, such as package_ids needing exactly the remaining material for a build/upgrade, the per-operation price interpretation for Logistics package jobs, and the species/cull_target ranch workflow. This is useful supplemental semantics, though it does not add detail for every parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb+resource statement ('Manage facilities at stations') and enumerates the full action set (types, build, list, owned, ...), so an agent can tell this is the central facility-dispatch tool. It distinguishes the tool's scope from sibling ship/station commands by naming the domains: production, faction, personal, sales.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives internal routing guidance ('Use 'owned' and 'faction_owned' for cross-station views', 'Call with no action or action 'help''), but it does not explicitly contrast this tool with external alternatives (e.g., when to use the sibling 'repair' command instead of the 'repair' action here). Usage context is clear, but exclusions and alternative-tool selection are left implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

B3.4/5.0
Disambiguation4/5

Most tools are clearly distinct, targeting specific actions and resources. A few overlaps exist (e.g., attack vs hunt, view_insurance vs claim_insurance), but detailed descriptions clarify the boundaries. The scale makes selection harder, but each tool has a clear purpose.

Naming Consistency4/5

The majority use a consistent verb_noun snake_case pattern (e.g., create_buy_order, get_cargo, accept_mission). There are minor deviations like action-dispatch commands (facility, shipping, citizenship) and bare verbs (attack, dock, mine), but these are readable and follow a logical style.

Tool Count1/5

With 212 tools, the server far exceeds any reasonable scope for an MCP. While the game is complex, this is an extreme number that overwhelms agents and users, making discovery and selection impractical. The calibration considers 25+ already too many, and 212 is extreme.

Completeness5/5

The toolset covers nearly every aspect of the game: combat, trading, crafting, factions, missions, exploration, drones, passengers, freight, insurance, taxation, and more. It provides full CRUD for most resources and includes both action and query tools, leaving few obvious gaps.

Resources