---
title: "AgentHotel for agent developers — the hotel is an MCP server"
description: "Deploy and inspect AI agents from your own agent: fleet tools, ask_agent, set_agent_env, logs and health over MCP, plus a REST API that does everything the UI does."
theme: default
footer: "AgentHotel · MIT · the panel's MCP token is root-equivalent on that host"
---

::nav{brand="AgentHotel" home="/"}
- MCP integration → https://github.com/magnusfroste/agenthotel#mcp-integration
- API overview → https://github.com/magnusfroste/agenthotel#api-overview
- Architecture → https://github.com/magnusfroste/agenthotel#architecture
- Repository → https://github.com/magnusfroste/agenthotel
::

::hero{eyebrow="for agent developers and tool builders"}
# The hotel is an MCP server, too.

## Deploy a guest from your own agent: list, create, redeploy, delete, check health, pull logs. Both surfaces share one endpoint, so a supervising agent can cross-check what a working agent claims against what the host recorded.

[See the tool surface](#tools){.primary} [Repository](https://github.com/magnusfroste/agenthotel){.ghost}
::

::text
## One endpoint, two audiences

The panel you click and the endpoint your agent calls are the same installation. Point a client at it and the fleet becomes a tool:

```json
{
  "mcpServers": {
    "agenthotel": {
      "url": "https://panel.yourdomain.com/mcp",
      "headers": { "Authorization": "Bearer YOUR_TOKEN" }
    }
  }
}
```

It is off until you enable it under System → MCP Server. The token is the panel's own — root-equivalent on that host — so treat it accordingly and rotate it from the same page.
::

::features{title="What your agent can call" columns="4"}
- icon: ▸
  title: Fleet
  body: `list_agents`, `get_agent`, `create_agent`, `delete_agent`, `redeploy_agent`, `get_agent_logs`.
- icon: ⌘
  title: Put agents to work
  body: `ask_agent` hands a hosted agent a task and returns the reply, or dispatches it in the background so it keeps working after the call returns.
- icon: ✳
  title: Credentials on demand
  body: `set_agent_env` gives an agent already checked in the credentials its next job needs — stored in its config, so they survive restarts and redeploys.
- icon: ◉
  title: Observability
  body: `health_check`, `get_host_metrics`, `get_agent_stats`, `get_uptime`, `get_docker_usage`, `get_events`, `system_status`, `run_cleanup`.
- icon: ▤
  title: Templates
  body: `list_runtimes`, `list_templates`, `get_template`, `create_template` — the same data-driven cards the deploy form is built from.
- icon: ↻
  title: Between hotels
  body: `create_transfer` and `import_from_hotel` move an agent, memory included, server to server.
- icon: ⚑
  title: Into the container
  body: `exec_in_agent` runs a command inside an agent's container for inspection. It does not touch the VPS host — that is the panel's own Server Console.
- icon: ◇
  title: Or skip MCP
  body: Everything the UI does is also a token-authenticated JSON API: agents, stats, uptime, events, templates, providers, domains, certificates, system.
::

::split{eyebrow="the part that is different" image="https://images.unsplash.com/photo-1517245386807-bb43f82c33c4?w=1200&q=80" imageAlt="A row of desks seen from above"}
## Four panes, four models, one question

Chat opens up to four agents at once — each a live session in its own container, on whatever model that agent runs. Send one message to all of them and read the answers side by side: the quickest way to compare two models, or two harnesses, on a real question.

The panes speak Agent Client Protocol to `hermes acp` and `openclaw acp`: streamed answers, thinking, tool calls and plans as they happen, permission requests as buttons. Close the tab and the session detaches instead of ending; the pane comes back to the same process, or restores the conversation in a new one. An idle chat pauses after 30 minutes and picks up where it left off.
::

::quote{by="AgentHotel README" role="on why the surfaces are shared"}
Because both surfaces share one endpoint, a supervising agent can cross-check what a working agent claims against what the host recorded.
::

::text
## What you get to build on

- **A room per agent** — its own container, its own RAM and CPU cap, its own subdomain with automatic HTTPS, its own volumes for sessions, memory and workspace files.
- **A template that is a recipe** — an image, a compose file or a repository, built from its Dockerfile or run with its compose file. Declared secrets are generated at deploy and never shared between two deployments.
- **A shared table** — SkillHub is self-hosted Supabase with pgvector and storage, so guests can find what a colleague already worked out instead of starting from nothing.
- **A way out** — an agent's memory is its harness's own files, and they travel with it. That is what makes the export, the import and the transfer link honest.
::

::faq{title="Developer questions"}
- q: How do I test an agent without opening a chat?
  a: There is a test action that sends one message the way the agent's own chat would, with the answer or the agent's own error on screen. A missing provider key shows up in twenty seconds instead of a first failed conversation.
- q: Can I point an agent at my own MCP servers?
  a: Yes. MCP servers are configuration in the panel: point a Hermes agent at one and the block is written into its config on deploy, so a new agent is born able to reach the organisation's tools and an agent recreated from its config comes back whole.
- q: Does a redeploy lose the conversation?
  a: No. Sessions, memory and workspace files live in volumes that outlive the container. Dashboard sessions are signed with a key the panel generates per agent, so redeploying does not log you out.
- q: What if an agent is unhealthy right after deploy?
  a: Give it a minute. Hermes takes about 30 seconds from container start to listening and answers 502 until then; its log says HERMES_DASHBOARD_READY when it is up, and the health sweep corrects itself on the next pass.
- q: Which runtimes can I deploy?
  a: Hermes, OpenClaw, Odysseus, a generic Docker App, a Git App built from a repository, a Git Compose stack, and full Docker Compose deployments.
::

::sites{title="Every page in this hotel is one markdown file" hide="lobby.agenthotel.org"}
This is the `sites` block: a directory of what this Lobby instance serves. Each card below is a single markdown file, written over MCP, with no database and no build step.
::

::cta
## Point a client at the endpoint and let it hire the staff.

One panel, one MCP endpoint, one REST API — and a fleet you can inspect from either side.

[Read the repository](https://github.com/magnusfroste/agenthotel){.primary} [MCP integration](https://github.com/magnusfroste/agenthotel#mcp-integration){.ghost}
::

::footer{note="AgentHotel deploys upstream projects' own images; their names and marks belong to their respective projects."}
- Source → https://github.com/magnusfroste/agenthotel
- API overview → https://github.com/magnusfroste/agenthotel#api-overview
- Architecture → https://github.com/magnusfroste/agenthotel#architecture
::