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 (they earn the hunter no hunt mission credit) — 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. Dismantling a ranch releases its herd back into the wild. 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

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.

  1. Added
  2. Removed
  3. 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"
      +}
  4. 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"
      +]
  5. 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"
      +]
  6. First observed

TDQS

B3.1/5.0
Behavior1/5

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

The annotations declare readOnlyHint=true and idempotentHint=true, but the description documents irreversible writes: dismantle packages the facility and takes it offline, credits are not refunded, buy_listing purchases, transfer moves items, repair consumes 30% materials. An agent trusting the annotation would treat a destructive multi-action tool as a safe read, which is the exact failure mode the contradiction rule targets.

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

Conciseness3/5

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

It is front-loaded with the action list and organized under uppercase headers (WILDLIFE RANCH, DISMANTLE, FACTION SHIP GARAGE, REPAIR), which makes a very long block scannable. However, for a single tool it runs several hundred words and spends substantial space on one subsystem (ranches, packages) while leaving most actions with one-line mentions, so length is not evenly earned.

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?

For a 31-action, 34-parameter tool with no output schema, the description covers the high-risk paths (dismantle, ranch, repair, garage) well and points to action 'help' for exhaustive docs. It still leaves many actions undocumented in prose (transfer, buy_listing/cancel_listing, personal_build/personal_visit, job_list/job_reorder, set_output_price), relying on the enum and the help fallback.

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

Parameters3/5

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

Schema description coverage is 100% across 34 parameters, so the baseline is 3; the schema already explains facility_id, species, cull_target, package_ids, deliver_to and the rest. The description adds workflow-level semantics (passing package_ids straight to build/upgrade, one cargo_container cost per package, cull_target behavior) but not per-parameter syntax beyond what the schema already carries.

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

Purpose4/5

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

The description opens with a specific verb+resource+scope: 'Manage facilities at stations (production, faction, personal, sales, and more)' and enumerates all 31 actions. An agent can tell this is the facility-management tool for built structures. It does not explicitly contrast itself with nearby siblings (build_outpost, dismantle_outpost, build_base), so it stops short of a 5.

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

Usage Guidelines4/5

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

Strong conditional routing inside the tool: dismantle vs dismantle_outpost ('Outpost built-in storage and fuel require dismantle_outpost'), 'owned'/'faction_owned' for cross-station views, repair's purpose, and the ranch prerequisites (faction_build + facility_type=wildlife_corral + species, needing Xenobiology and a live population). It never states globally when to reach for this tool versus other structure tools, and most individual actions get no when-to-use note.

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.

Resources