---
title: "mcp"
description: "Run a Model Context Protocol server over stdio that exposes each daemon RPC as a typed tool call."
canonical: https://wavelength.lightning.engineering/cli/mcp/
---

> Docs index: https://wavelength.lightning.engineering/llms.txt

# mcp

`mcp` hosts a Model Context Protocol (MCP) server that exposes the daemon RPC as typed tool calls over stdio. Agents invoke tools with structured JSON parameters and receive raw proto-JSON responses from the daemon. The parent `mcp` command is a group; the work happens in `mcp serve`.

## Flags

`mcp` itself takes no bespoke flags; it dispatches to `mcp serve` below. The subcommand accepts `--help` and the global connection flags (`--rpcserver`, `--tlscertpath`, `--no-tls`).

## Example

`mcp` alone prints usage and exits; the subcommand does the work:

```bash
wavecli mcp serve
```

## Subcommands

### `mcp serve`

Starts an MCP server on stdio that exposes each daemon RPC as a typed tool call. The server runs until the client disconnects. It registers the everyday wallet-verb tools first (so an agent listing tools sees the day-to-day surface first), then the legacy daemon tools, then the swap tools when the daemon was built with the matching build tag.

`mcp serve` takes no bespoke flags beyond the global connection flags; it reuses the same TLS, `--no-tls`, and `--tlscertpath` handling as every other command so the MCP surface honors the daemon connection settings.

```bash
wavecli mcp serve
```

> **create and unlock are intentionally omitted**
>
> Wallet setup verbs that handle secret material (create, unlock, seed generation) are never registered as MCP tools: passwords and seed phrases must not transit the MCP protocol, where they could leak into agent logs or provider APIs. Use the CLI directly for wallet setup.

Registered tools include the everyday `balance`, `getinfo`, and send surfaces plus the advanced `ark.*` namespace (for example `ark.vtxos.list`, `ark.vtxos.refresh`, `ark.vtxos.leave`, `ark.oor.receive`, `ark.send.inround`, `ark.send.oor`) and, in swapruntime builds, the `swap.*` tools.

`ark.vtxos.refresh` carries the same fee-consent contract as the CLI. Since there’s no interactive prompt to fall back to, a real refresh requires `yes: true`; without it the tool returns an error telling the agent to call `dry_run: true` first for the itemized advisory estimate, then re-call with `yes: true` to acknowledge the fee and queue.
