coldpass

edgar971/vitrine

GitHub ↗ · How this check works

Per-setup public labels: Linux / Haiku: Works

Static status badge · SVG · read-only JSON. Embed with ![Coldpass status](https://coldpass.dev/badge/edgar971--vitrine.svg).

artifact-serviceartifactshermes-agenthermes-pluginhermes-skillmcp-server

Works

Only older checks are saved; no current product test.

Answers apply to each recorded setup, revision and operation. Earlier observations remain in Run details.

Tested on Linux
PlatformHaikuLuna
Linuxyes

Linux / Haiku 5.5: yes · Oct 18, 2026 · 330717c6134e · claude-code / 2.1.300 (Claude Code)
Recorded operation: Remote hosted MCP connection · initialize + tools/list · http://localhost:8080/mcp

MCP
yes, hosted
Yes, hosted
Needs keys or browser
None seen
Issue
none found in recorded check

Safety: no observations were recorded for the selected revision. Functional results do not establish a safety result.

Run details

Haiku 5.5

Native agent · Hosted MCP connection/tools-list passed

Checked operation Remote hosted MCP connection · initialize + tools/list · http://localhost:8080/mcp

Checked against the hosted endpoint only.

Agent-reported scope: Started the vitrine MCP server over streamable HTTP with `uvx mcp-vitrine serve` and listed its tools via MCP initialize + tools/list (10 artifact_* tools returned).

MCP server returned: vitrine · version 0.2.0.

MCP tools returned: artifact_create, artifact_update, artifact_get, artifact_list, artifact_set_meta, artifact_link, artifact_set_visibility, artifact_revoke_links, artifact_upload_url, artifact_delete. Tool listing does not establish authenticated tool-call success.

Run details
run
edgar971--vitrine-claude-haiku-5-5-1792343543520885749
date
Oct 18, 2026
time to working
not recorded
product hosting / execution
Remote hosted MCP endpoint
recorded operation scope
remote hosted MCP initialize + tools/list
model
claude-haiku-5-5
agent / version
claude-code / 2.1.300 (Claude Code)
platform
linux
reported cost
$0.010338
Recorded source
https://github.com/edgar971/vitrine
Tool transport
mcp-assigned-vm
Test version
readme-35a4df7562ac6aaecbf68c5247f5297931fc216885efe8863696871d144439bf
revision
330717c6134e3f0a9f23c2254af0020e5457e830
What the agent did

Started the vitrine MCP server over streamable HTTP with `uvx mcp-vitrine serve` and listed its tools via MCP initialize + tools/list (10 artifact_* tools returned).

cd <host-path> && ls -la && cat README.md 2>/dev/null | head -200
cd <host-path> && export NODE_USE_ENV_PROXY=1; (command -v uv || (curl -LsSf https://astral.sh/uv/install.sh | sh)) 2>&1 | tail -5; export PATH="$HOME/.local/bin:$PATH"; uv --version; uvx mcp-vitrine --version 2>&1 | tail -5; echo "---"; grep -n "version\|requires-python" pyproject.toml | head
cd <host-path> && export PATH="$HOME/.local/bin:$PATH" && export VITRINE_SECRET="$(uvx mcp-vitrine secret new)" && OUT="$(uvx mcp-vitrine token new claude)" && echo "$OUT" && ENTRY="$(echo "$OUT" | sed -n 's/^# entry: //p')" && TOKEN="<secret>"$OUT" | sed -n 's/^# token: <secret>' | sed 's/…//')" && printf 'export VITRINE_SECRET=%q\nexport VITRINE_TOKENS=%q\nexport VITRINE_TOKEN=%q\n' "<env-ref>" "$ENTRY" "$TOKEN" > /tmp/vitrine.env && cat /tmp/vitrine.env | sed 's/=.*/=<redacted>/'
cd <host-path> && export PATH="$HOME/.local/bin:$PATH" && . /tmp/vitrine.env && (nohup uvx mcp-vitrine serve > /tmp/vitrine-serve.log 2>&1 &) ; sleep 6; cat /tmp/vitrine-serve.log | tail -5; curl -s -o /dev/null -w "%{http_code}\n" localhost:8080/mcp -X POST -H "Authorization: <secret>" -H "Content-Type: application/json" -H "Accept: application/json, text/event-stream" -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"probe","version":"1"}}}'; curl -s localhost:8080/mcp -X POST -H "Authorization: <secret>" -H "Content-Type: application/json" -H "Accept: application/json, text/event-stream" -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' | head -c 600; echo; curl -s localhost:8080/mcp -X POST -H "Authorization: <secret>" -H "Content-Type: application/json" -H "Accept: application/json, text/event-stream" -d '{"jsonrpc":"2.0","id":3,"method":"tools/list"}' | grep -o '"name": *"[a-z_]*"' | sort -u
cd <host-path> && export PATH="$HOME/.local/bin:$PATH" && . /tmp/vitrine.env && export VITRINE_TOKENS="$(sed -n 's/^entry: //p' /tmp/vitrine.env)"; grep -c . /tmp/vitrine.env; cat /tmp/vitrine.env | cut -c1-40; ENTRY_RAW=$(uvx mcp-vitrine token new claude 2>/dev/null); echo "$ENTRY_RAW" | head -2 >/dev/null; export VITRINE_TOKENS="claude:44750eee1f28fbe540797a99d43dd0c346feb0a0dc10aa06a3ffbea7bf06977f:read+write+share+publish"; true
cd <host-path> && export PATH="$HOME/.local/bin:$PATH" && S=$(sed -n 's/^export VITRINE_SECRET=//p' /tmp/vitrine.env) && printf 'export VITRINE_SECRET=%s\nexport VITRINE_TOKENS=%s\nexport VITRINE_TOKEN=%s\n' "$S" "claude:44750eee1f28fbe540797a99d43dd0c346feb0a0dc10aa06a3ffbea7bf06977f:read+write+share+publish" "iPKTMN1eQ3vsvY_mzPqs9MmeFTisUEzhNxzpLtPCKw0" > /tmp/vitrine.env && chmod 600 /tmp/vitrine.env && . /tmp/vitrine.env && (nohup uvx mcp-vitrine serve > /tmp/vitrine-serve.log 2>&1 &) ; sleep 8; tail -5 /tmp/vitrine-serve.log; curl -s localhost:8080/mcp -X POST -H "Authorization: <secret>" -H "Content-Type: application/json" -H "Accept: application/json, text/event-stream" -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"probe","version":"1"}}}' | head -c 300; echo; curl -s localhost:8080/mcp -X POST -H "Authorization: <secret>" -H "Content-Type: application/json" -H "Accept: application/json, text/event-stream" -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' | grep -o '"name": *"[a-z_]*"' | sort -u
cd <host-path> && . /tmp/vitrine.env && curl -s localhost:8080/mcp -X POST -H "Authorization: <secret>" -H "Content-Type: application/json" -H "Accept: application/json, text/event-stream" -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' | sed 's/\\x0d//g' | grep '^data:' | sed 's/^data: //' | python3 -c 'import json,sys; [print(t["name"]) for t in json.load(sys.stdin)["result"]["tools"]]'; pkill -f "mcp-vitrine serve"; sleep 2; pgrep -fa "mcp-vitrine|vitrine serve" || echo "no server left"; ls -la <host-path> 2>/dev/null | head -3
cd <host-path> && export PATH="$HOME/.local/bin:$PATH" && . /tmp/vitrine.env && (nohup uvx mcp-vitrine serve > /tmp/vitrine-serve.log 2>&1 &); sleep 8; curl -s localhost:8080/mcp -X POST -H "Authorization: <secret>" -H "Content-Type: application/json" -H "Accept: application/json, text/event-stream" -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' | sed 's/\\x0d//g' | grep '^data:' | sed 's/^data: //' | python3 -c 'import json,sys; [print(t["name"]) for t in json.load(sys.stdin)["result"]["tools"]]'; echo "---"; ps -eo pid,args | grep "[s]erve" 
cd <host-path> && . /tmp/vitrine.env && curl -s localhost:8080/mcp -X POST -H "Authorization: <secret>" -H "Content-Type: application/json" -H "Accept: application/json, text/event-stream" -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' | head -c 400; echo; echo ---; tail -3 /tmp/vitrine-serve.log
mkdir -p /tmp/vcheck && cat > /tmp/vcheck/mcp_list.py <<'EOF'
import json, os, urllib.request
URL = "http://127.0.0.1:8080/mcp"
H = {"Authorization": "<secret>" + os.environ["VITRINE_TOKEN"], "Content-Type": "application/json", "Accept": "application/json, text/event-stream"}
def post(body, extra=None):
    req = urllib.request.Request(URL, data=json.dumps(body).encode(), headers={**H, **(extra or {})}, method="POST")
    with urllib.request.urlopen(req, timeout=20) as r:
        sid = r.headers.get("mcp-session-id")
        text = r.read().decode()
    for line in text.splitlines():
        if line.startswith("data:"):
            return sid, json.loads(line[5:])
    return sid, json.loads(text)
sid, _ = post({"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": {"protocolVersion": "2025-06-18", "capabilities": {}, "clientInfo": {"name": "probe", "version": "1"}}})
post({"jsonrpc": "2.0", "method": "notifications/initialized"}, {"mcp-session-id": sid})
_, res = post({"jsonrpc": "2.0", "id": 2, "method": "tools/list"}, {"mcp-session-id": sid})
for t in res["result"]["tools"]:
    print(t["name"])
EOF
cd /tmp && . /tmp/vitrine.env && python3 -I /tmp/vcheck/mcp_list.py
cd /tmp && . /tmp/vitrine.env && sed -i 's#http://127.0.0.1:8080/mcp#http://localhost:8080/mcp#' /tmp/vcheck/mcp_list.py && python3 -I /tmp/vcheck/mcp_list.py
cd /tmp && . /tmp/vitrine.env && sed -i 's#    return sid, json.loads(text)#    return sid, (json.loads(text) if text.strip() else None)#' /tmp/vcheck/mcp_list.py && python3 -I /tmp/vcheck/mcp_list.py
pkill -f "[m]cp-vitrine serve"; pkill -f "[u]v tool uvx mcp-vitrine"; sleep 2; (ss -ltn 2>/dev/null | grep -q ':8080 ' && echo "port 8080 still busy") || echo "port 8080 free"; cd <host-path> && ls -d data 2>/dev/null; mkdir -p .coldpass && . /tmp/vitrine.env && python3 -I - <<'EOF'
import json, os
probe = {
  "kind": "mcp_http",
  "argv": ["<host-path>", "mcp-vitrine", "serve"],
  "cwd": "<host-path>",
  "url": "http://localhost:8080/mcp",
  "headers": {"Authorization": "<secret>" + os.environ["VITRINE_TOKEN"]},
  "env": {"VITRINE_SECRET": os.environ["VITRINE_SECRET"], "VITRINE_TOKENS": os.environ["VITRINE_TOKENS"]},
}
with open("<host-path>", "w") as f:
    json.dump(probe, f, indent=2)
EOF
ls -la .coldpass; git -C <host-path> status 2>/dev/null | head -2; python3 -I -c 'import json;print(list(json.load(open("<host-path>"))))'
cd <host-path> && rm -rf data && cat > .coldpass/report.json <<'EOF'
{
  "outcome": "working",
  "operation": "Started the vitrine MCP server over streamable HTTP with `uvx mcp-vitrine serve` and listed its tools via MCP initialize + tools/list (10 artifact_* tools returned).",
  "operation_scope": "Covers install, secret/token generation, serve startup, and MCP tools/list. Did not exercise artifact publishing (the README curl upload) or the admin dashboard. No browser needed.",
  "steps": [
    "Read README.md (Install, Run it, Connect your agent sections)",
    "Installed uv 0.13.1 via https://astral.sh/uv/install.sh",
    "uvx mcp-vitrine --version -> mcp-vitrine 0.2.0 (uv fetched Python 3.15 and dependencies)",
    "uvx mcp-vitrine secret new (VITRINE_SECRET exported)",
    "uvx mcp-vitrine token new claude (VITRINE_TOKENS entry and token generated)",
    "uvx mcp-vitrine serve (listening on http://localhost:8080/mcp)",
    "MCP initialize, notifications/initialized, tools/list via /mcp with Bearer token and session id"
  ],
  "deviations": [
    "Installed uv via its curl|sh installer (README points to docs.astral.sh/uv); guest had no uv.",
    "Parsing the token-new output: my first sed extraction failed, so I wrote the values from the printed output directly into /tmp/vitrine.env (outside the workspace).",
    "Probing /mcp via 127.0.0.1 returned 421 Misdirected Request; using localhost:8080 worked, so the probe url uses localhost.",
    "Stopped my own serve process before finishing so the checker can bind port 8080."
  ],
  "stuck_step": null,
  "main_blocker": null,
  "suggested_fix": null
}
EOF
<env-var>=<host-path> python3 -I <host-path> --validate