Koskamo

Spann Stays MCP

A read-only MCP server providing sample stays, booking constraints, and staged reservation actions for review. It allows agents to search availability, explain booking constraints, and prepare reservation actions using fixture-backed data without live inventory or payment authority.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Spann Stays MCP logo, by SpannVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by Spann
MCP endpoint (Streamable HTTP)
https://mcp.spannhq.com/mcp
Vendor documentation

What its tools do

6 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

6 of 6 have a description · 6 of 6 declare behavior hints · 0 of 6 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to spannhq.com ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Search availability for sample Japanese lodging properties
  • Explain booking constraints for specific stays
  • Prepare staged reservation actions for agent review

Source and maintenance

Vendor evidenceRegistry 0.2.1+canonical.1
Maintenance checked

Protocol and capabilities

Server
hospitality 0.2.1
MCP protocol negotiated in check
2025-06-18
Tools
6 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Spann hospitality MCP: sample workflow tools are fixture-only; published customer tools return facts and official routes. Surface='public'. Inquiry tools, when explicitly configured, require authenticated operator access, exact payload preview and confirmation before sending an inquiry. Unknown delivery is never automatically retried. No live inventory, booking, payment or PMS action is supported.

Tools

6 advertised

search_availability — Search Sample Stay Availability
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search deterministic sample stay options from the Spann Stays fixture; no live inventory or property availability is queried.

search_availability input schema
{
  "type": "object",
  "oneOf": [
    {
      "required": [
        "destination"
      ]
    },
    {
      "required": [
        "property_id"
      ]
    }
  ],
  "required": [
    "stay",
    "guest_count",
    "language"
  ],
  "properties": {
    "stay": {
      "type": "object",
      "required": [
        "check_in",
        "check_out"
      ],
      "properties": {
        "check_in": {
          "type": "string"
        },
        "check_out": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "limit": {
      "type": "integer",
      "maximum": 20,
      "minimum": 1
    },
    "language": {
      "enum": [
        "en",
        "ja"
      ],
      "type": "string"
    },
    "destination": {
      "type": "object",
      "required": [
        "country",
        "prefecture"
      ],
      "properties": {
        "area": {
          "type": "string"
        },
        "city": {
          "type": "string"
        },
        "country": {
          "type": "string",
          "const": "JP"
        },
        "prefecture": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "guest_count": {
      "type": "object",
      "required": [
        "adults",
        "children",
        "rooms"
      ],
      "properties": {
        "rooms": {
          "type": "integer",
          "minimum": 1
        },
        "adults": {
          "type": "integer",
          "minimum": 1
        },
        "children": {
          "type": "integer",
          "minimum": 0
        }
      },
      "additionalProperties": false
    },
    "property_id": {
      "type": "string"
    },
    "required_constraints": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "additionalProperties": false
}
search_availability annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
explain_booking_constraints — Explain Sample Booking Constraints
Advertised by the server during the last successful anonymous check.
Advertised read-only

Explain fixture-backed booking constraints for a sample property and rate; no property authority or live policy decision is provided.

explain_booking_constraints input schema
{
  "type": "object",
  "required": [
    "property_id",
    "room_rate_id",
    "language"
  ],
  "properties": {
    "language": {
      "enum": [
        "en",
        "ja"
      ],
      "type": "string"
    },
    "property_id": {
      "type": "string"
    },
    "room_rate_id": {
      "type": "string"
    },
    "traveler_constraints": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "constraint_type",
          "value"
        ],
        "properties": {
          "notes": {
            "type": [
              "string",
              "null"
            ]
          },
          "value": {
            "type": [
              "string",
              "number",
              "boolean",
              "null"
            ]
          },
          "constraint_type": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    }
  },
  "additionalProperties": false
}
explain_booking_constraints annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
prepare_reservation_action — Prepare Sample Reservation Action
Advertised by the server during the last successful anonymous check.
Advertised read-only

Prepare a fixture-only reservation action for review; never holds a room, books, pays, sends, or contacts a property. Use sample traveler placeholders only.

prepare_reservation_action input schema
{
  "type": "object",
  "required": [
    "option_id",
    "room_rate_id",
    "traveler_packet",
    "desired_action_mode"
  ],
  "properties": {
    "option_id": {
      "type": "string"
    },
    "room_rate_id": {
      "type": "string"
    },
    "traveler_packet": {
      "type": "object",
      "required": [
        "lead_traveler_name",
        "party",
        "contact",
        "language",
        "consent_source"
      ],
      "properties": {
        "party": {
          "type": "object"
        },
        "contact": {
          "type": "object"
        },
        "language": {
          "enum": [
            "en",
            "ja"
          ],
          "type": "string"
        },
        "consent_source": {
          "type": "string"
        },
        "lead_traveler_name": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "special_requests": {
      "type": "array",
      "items": {
        "type": "object"
      }
    },
    "desired_action_mode": {
      "enum": [
        "stage_only"
      ],
      "type": "string"
    },
    "confirmation_language": {
      "enum": [
        "en",
        "ja"
      ],
      "type": "string"
    }
  },
  "additionalProperties": false
}
prepare_reservation_action annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_customer_property — Read Published Customer Property
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read a published customer property record with public provenance and an official handoff route; unpublished records fail closed.

get_customer_property input schema
{
  "type": "object",
  "required": [
    "property_id"
  ],
  "properties": {
    "property_id": {
      "enum": [
        "kumihimo-kobe",
        "elevenvillage",
        "asagiya-takayama",
        "big-island-base",
        "halo"
      ],
      "type": "string"
    }
  },
  "additionalProperties": false
}
get_customer_property annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
resolve_customer_route — Resolve Official Customer Handoff
Advertised by the server during the last successful anonymous check.
Advertised read-only

Resolve a published customer's official booking or inquiry URL from stay length; never checks inventory or sends an inquiry.

resolve_customer_route input schema
{
  "type": "object",
  "required": [
    "property_id",
    "stay"
  ],
  "properties": {
    "stay": {
      "type": "object",
      "required": [
        "check_in",
        "check_out"
      ],
      "properties": {
        "check_in": {
          "type": "string"
        },
        "check_out": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "property_id": {
      "enum": [
        "kumihimo-kobe",
        "elevenvillage",
        "asagiya-takayama",
        "big-island-base",
        "halo"
      ],
      "type": "string"
    }
  },
  "additionalProperties": false
}
resolve_customer_route annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_guest_observations — Read Attributed Guest Observations
Advertised by the server during the last successful anonymous check.
Advertised read-only

Read moderated guest observations separately from property facts; no review collection or submission.

get_guest_observations input schema
{
  "type": "object",
  "required": [
    "property_id"
  ],
  "properties": {
    "preference": {
      "enum": [
        "quiet",
        "shade",
        "spaciousness",
        "sleep_comfort",
        "atmosphere"
      ],
      "type": "string"
    },
    "property_id": {
      "enum": [
        "kumihimo-kobe",
        "elevenvillage",
        "asagiya-takayama",
        "big-island-base",
        "halo"
      ],
      "type": "string"
    }
  },
  "additionalProperties": false
}
get_guest_observations annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (2 of 2 answered).

  1. 2026-11-06: 1 of 1 checks answered
  2. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
440 ms
95th percentile latency
440 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 440 ms · metadata changed · 6 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http spann-stays-mcp https://mcp.spannhq.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add spann-stays-mcp --url https://mcp.spannhq.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable spann-stays-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "spann-stays-mcp": {
      "url": "https://mcp.spannhq.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "spann-stays-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.spannhq.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start spann-stays-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "spann-stays-mcp": {
      "type": "http",
      "url": "https://mcp.spannhq.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http spann-stays-mcp https://mcp.spannhq.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://mcp.spannhq.com/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "spann-stays-mcp": {
      "serverUrl": "https://mcp.spannhq.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Spann Stays MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Spann Stays MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing