Skip to main content
Glama
saya6k

wardrowbe-mcp

by saya6k

wardrowbe-mcp

MCP (Model Context Protocol) server exposing the Wardrowbe wardrobe API as tools an LLM can call. Works against any Wardrowbe instance — self-hosted (e.g., behind a reverse proxy or the ha-wardrowbe Home Assistant add-on) or a hosted/cloud deployment.

22 tools covering outfit suggestions, item browsing, wear/wash logging, acceptance flow, analytics, and notifications. Tool surface mirrors hacs-wardrowbe's LLM API one-for-one, plus three read-only helpers (list_items, get_item, get_outfit).

Install

pip install wardrowbe-mcp

Or from source:

pip install git+https://github.com/saya6k/mcp-wardrowbe

Run

wardrowbe-mcp \
  --wardrowbe-url https://wardrowbe.example.com \
  --api-key "$(openssl rand -hex 32)" \
  --auth oidc \
  --oidc-issuer-url https://id.example.com \
  --oidc-client-id wardrowbe \
  --oidc-refresh-token "<refresh-token>"

The process listens on 0.0.0.0:8080 by default and serves both transports at the root:

  • http://<host>:8080/mcp — Streamable HTTP (recommended)

  • http://<host>:8080/sse — Server-Sent Events (legacy MCP clients)

  • http://<host>:8080/ — anonymous health/info probe

All non-probe routes require Authorization: Bearer <api-key>.

Every flag has a matching environment variable so you can drive it from a shell environment, a .env, or a container orchestrator without rewriting the command line:

Flag

Env var

Notes

--host

MCP_BIND_HOST

Bind address. Default 0.0.0.0.

--port

MCP_BIND_PORT

Bind port. Default 8080.

--wardrowbe-url

WARDROWBE_URL

Base URL of the Wardrowbe backend.

--api-key

MCP_API_KEY

Required Bearer token for incoming MCP calls.

--auth

MCP_AUTH_MODE

dev (default) or oidc.

--external-id

MCP_EXTERNAL_ID

Dev-mode identity sent to /auth/sync.

--oidc-issuer-url

MCP_OIDC_ISSUER_URL

OIDC discovery base.

--oidc-client-id

MCP_OIDC_CLIENT_ID

--oidc-client-secret

MCP_OIDC_CLIENT_SECRET

Optional for public clients.

--oidc-refresh-token

MCP_OIDC_REFRESH_TOKEN

Obtained from a one-time external PKCE flow.

--log-level

MCP_LOG_LEVEL

DEBUG/INFO/WARNING/ERROR.

Auth to the Wardrowbe backend

Two modes, selected by --auth:

  • dev — sends {external_id, email, display_name} to POST /auth/sync. Works only when the Wardrowbe backend itself is in dev mode (its DEBUG=true and SECRET_KEY left at the upstream default).

  • oidc — refreshes a stored refresh_token against the configured issuer to mint a fresh id_token, then /auth/sync. The refresh token must come from a one-time interactive PKCE flow you run yourself — there is no in-process browser callback because the MCP server is headless. Once obtained, the server rotates the token automatically if the IDP returns a new one.

get_refresh_token.py — a minimal one-shot PKCE helper — is the easiest way to bootstrap OIDC. Edit the four constants at the top (ISSUER, CLIENT_ID, CLIENT_SECRET, REDIRECT_URI), register that redirect URI on your IDP client, then run:

python3 get_refresh_token.py

A browser opens against the IDP; after you authenticate the script prints the refresh_token to stdout. Paste it into --oidc-refresh-token (or the MCP_OIDC_REFRESH_TOKEN env var) when starting wardrowbe-mcp. The script needs the offline_access scope to be allowed on your IDP client; otherwise the token endpoint omits refresh_token from the response. Common IDPs verified: Pocket ID. Should work with any OIDC-conformant provider (Keycloak, Authentik, Auth0, etc.).

Client config

Claude Code / Claude Desktop

{
  "mcpServers": {
    "wardrowbe": {
      "type": "http",
      "url": "http://<host>:8080/mcp",
      "headers": { "Authorization": "Bearer <api-key>" }
    }
  }
}

For SSE-only clients, swap "type": "http""type": "sse" and /mcp/sse.

Other MCP-aware clients

Any client that supports HTTP transport with a Bearer header works. The server advertises tools, instructions, and a bundled agentskills.io-compatible skill at skill://wardrowbe-skill/SKILL.md (plus sibling resources).

Skill bundle

wardrowbe_mcp/skill/ ships inside the package as the agent-facing documentation: a SKILL.md manifest with usage guidance and three worked examples under examples/. The MCP server registers each file as an MCP resource at startup, so MCP clients that auto-install skills pick it up automatically. Manual install is also possible by copying the directory into the client's skill discovery path.

The bundle's prose currently mentions the ha-wardrowbe add-on as the canonical deployment. If you're running this against a different Wardrowbe deployment, edit SKILL.md to match.

Development

git clone https://github.com/saya6k/mcp-wardrowbe
cd mcp-wardrowbe
pip install -e .
wardrowbe-mcp --help

Smoke test against a running instance:

curl -fsS http://127.0.0.1:8080/ | jq                       # anonymous health
curl -fsS http://127.0.0.1:8080/mcp \
  -H "Authorization: Bearer $MCP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"smoke","version":"0"}}}'

License

MIT. See LICENSE.

A
license - permissive license
-
quality - not tested
C
maintenance

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/saya6k/mcp-wardrowbe'

If you have feedback or need assistance with the MCP directory API, please join our Discord server