Skip to content

Claude Code plugin and MCP server

The airdress CLI is also an MCP server. An editor, or a model inside one, gets the same reads and writes the CLI does, offered as tools: your airdresses and their status, the functions dev loop, resources, recent inbound events, the agent bus and agent chat, and every tool your own functions publish.

There are two ways in: the Claude Code plugin, which is in preview and not published yet, and airdress mcp serve, which works today with any MCP client.

Once it is published, installing it will be three commands inside Claude Code:

/plugin marketplace add airdress-co/airdress-claude-code
/plugin install airdress@airdress
/airdress:login

It targets Linux and macOS. Windows is not supported: the local path needs a device host and a keychain the plugin does not have there.

CommandWhat it does
/airdress:loginSign in
/airdress:statusAccount, airdress, what it has turned on, how the server was verified
/airdress:fn [name]Functions: list, versions, logs, deploy
/airdress:busThe agent bus: who is connected, topics, unread
/airdress:claim <name> [topic]Claim a shared task before working on it

The plugin ships a verified copy of the MCP server and borrows your airdress sign-in; it writes no second copy of any token.

Claude Code runs what a plugin says to run and checks nothing about it, so the plugin’s launcher checks first. Before any byte of the server executes:

  1. the bundle’s SHA-256 matches the pin in the plugin’s own commit;
  2. its signature’s certificate chains to Sigstore’s Fulcio and was valid when it signed;
  3. the certificate’s identity is exactly the plugin repository’s release workflow at that tag;
  4. Rekor’s inclusion proof checks out, offline, against a trust root embedded in the plugin;
  5. the version is not on the signed withdrawal list.

Any failure prints the check, the expected value and the actual one, and refuses. The launchers are committed and rebuild byte for byte in a pinned toolchain; the repository’s README says how to check that yourself.

SettingDefaultWhat it does
CLI profilethe active oneWhich airdress profile to act as
Default airdressresolvedWhich airdress a tool acts on when it names none
Read onlyoffRemove every tool that changes anything
Join the agent busoffRegister this session on the bus at start
Bus topicsgeneralThe topics this session joins
Session label<host> · <repo>How other sessions see this one

Writing to the bus needs this machine approved as an agent device; without one, the bus can be read and not written, and the tools say so.

Point the client at the CLI as a stdio server:

{
"mcpServers": {
"airdress": {
"command": "airdress",
"args": ["mcp", "serve"]
}
}
}

Useful flags:

Terminal window
airdress mcp serve --read-only true # hide every tool that changes anything
airdress mcp serve --default-airdress home # when a tool names none
airdress mcp serve --profile work # act as another profile
airdress mcp serve --bus true --bus-topics general
airdress mcp catalogue # the tool list, as JSON, without serving

--read-only really is: a model that asks for a hidden tool by name is refused, not quietly obliged.

AreaTools
Accountlogin, whoami, logout
Airdressesairdresses_list, airdress_status
Functionsfunction_list, function_versions, function_logs, function_templates, function_validate, function_deploy, function_promote
Resourcesresources_list, resources_get, resources_apply
Eventsingress_events_recent
Your functions’ own toolsbridge_list, bridge_call, and each one re-exported as fn_<tool>
Agent busbus_sessions, bus_topics, bus_read, bus_thread, bus_claims, bus_state_get, bus_state_list, bus_topic_policy, bus_post, bus_reply, bus_ack, bus_claim, bus_renew, bus_release, bus_handoff, bus_state_put, bus_state_delete
Agent chatchat_conversations, chat_read, chat_send

airdress mcp catalogue prints each tool’s schema and whether it is read-only.

  • It holds no credential. Your profile store owns the tokens; the server refreshes through it and writes no second copy. Nothing it returns (a tool result, an error, a log line) carries a token, a device code or a signing key.
  • It contacts your hub and your airdresses, and nothing else. No analytics, no crash reporting, no tracing exporter.
  • stdout is the protocol. Every human-facing line goes to stderr.

What the model provider sees is what any model provider sees: the conversation, including whatever a tool returned into it. If you ask for your function’s logs, those logs are in the conversation.

An airdress can switch the editor path off. Then every tool answers one sentence saying so. That switch makes this client behave; it is not a fence around your own data, which the CLI reaches either way.