Skip to content

MCP tools

The hal0 dashboard's Agents → MCP tab, showing hosted MCP servers with live tool counts Agents → MCP tab — lists hal0’s hosted MCP servers (bundled + any installed) with live tool counts and one-click “add to Claude/Codex/Cursor” config; expand a server to see each tool’s read-only / gated / destructive badge. Pending approvals live in the separate approval inbox reachable from the top bar, not on this tab.

hal0 hosts two Streamable-HTTP MCP servers that agents call: a focused memory server (/mcp/memory) and a full admin server (/mcp/admin). Every admin tool is classified into one of three tiers — autonomous-read, autonomous-write, or approval-gated. Gated tools enqueue for owner approval before they run; autonomous tools execute immediately.

Hindsight-backed long-term memory. The memory subsystem is opt-in — these tools only function when the server is started with HAL0_MEMORY_ENABLED=1; otherwise calls degrade to a no-op / unavailable surface.

ToolTierEffect
memory_addautonomous-writeWrite one item → {id, timestamp} (+ operation_id when async).
memory_searchautonomous-readVector + tag + time-window query → {results}.
memory_recallautonomous-readToken-budgeted consolidated recall (Hindsight preferred) → {results}.
memory_listautonomous-readPaginated walk → {items, next_cursor}.
memory_deleteconditionalRemove by id(s) → {deleted}. Autonomous for one id; gated for >1.

Notable arguments:

  • dataset defaults to shared; private-mode callers promote to private:<client_id>. A search may pass a list of datasets.
  • source is server-injected from the caller’s identity and cannot be supplied by the caller (audit grounding).
  • document_id reuse upserts one logical document (e.g. an evolving conversation); it must match the identity grammar (alphanumeric / - / _, ≤ 64 chars).
  • memory_recall accepts max_tokens (default 4096, range 1–32768), types, dataset, and tags for token-budgeted retrieval via Hindsight recall.

The admin server hosts every tool an agent might call, including the memory_* tools above (delegated to the memory surface). Tools are classified as follows.

Execute immediately; pure reads against the local REST or host surface.

ToolEffect
slot_listList every slot known to hal0 (local + remote).
slot_statusOne slot’s lifecycle state + metadata.
model_listAggregate models from local registry + upstreams.
hardware_probeLive hardware probe — backends, memory, accelerators.
capability_listCapability overlay state — backends + selections.
provider_listList configured providers.
version_infohal0 version + runtime status.
stack_listList every stack, with the active stack + drift status.
stack_statusOne stack’s detail, active flag, and drift status.
profile_listList every profile in the catalog (seed + custom).
profile_statusOne profile’s resolved detail (image, flags, backend, used-by).
profile_exportExport a profile to a portable .hal0profile.json envelope (no secrets/host paths). A POST under the hood, but read-shaped — no state change.
gpu_target_versionDecode KFD’s gfx_target_version to a gfxNNNN string.
npu_statusXDNA NPU presence + driver binding.
env_reportComposite host snapshot (container, CPU, RAM, GPU, NPU, …).
model_store_probeProbe a model-store path (fstype, free/total, writable, UMA).

Mutating but reversible, scoped, and low blast-radius.

ToolEffect
model_swapHot-swap the primary slot to a new model.
memory_addAdd an item to long-term memory.
memory_searchSearch long-term memory.
memory_listPage through long-term memory items.
memory_deleteDelete memory item(s) — autonomous only for a single id.

Always enqueued for owner approval before execution. These are the members of GATED_TOOLS:

ToolEffect
model_pullPull a model into the local registry.
model_deleteDelete a model from the local registry.
slot_createCreate a new slot.
slot_deleteDelete a slot.
slot_restartRestart a slot’s systemd unit.
capability_setAssign a capability child to a slot.
config_writeUpdate hal0.toml top-level settings.
provider_credential_writeWrite provider credentials (secrets never echoed).
stack_applyApply a stack — commit its slot config and converge the running slot set to match.
stack_importImport a stack from a .hal0stack.json envelope.
stack_deleteDelete a custom stack from the catalog.
profile_importImport a profile from a .hal0profile.json envelope.
profile_deleteDelete a custom profile from the catalog.
logs_tailTail journald for one systemd unit.
memory_delete (bulk)Delete more than one memory id in a single call.

Stacks and profiles are gated the same way slots are: applying or importing a stack reconfigures the whole inference surface (it can load, swap, or unload every slot at once), and importing or deleting a profile mutates the shared catalog — both mirror the blast radius of slot_create/capability_set.

A gated call returns {"status": "pending_approval", "approval_id": "..."}. The owner approves or denies it from the dashboard approval inbox, the /api/agent/approvals surface, or the hal0 agent approvals CLI.