coldpass

Per-setup public labels: Linux / Haiku: Works

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

aicursorga4google-adsgoogle-analyticsmarketing

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 · 545aae42bfee · claude-code / 2.1.300 (Claude Code)
Recorded operation: <host-path> -m adloop · local stdio MCP start + initialize + tools/list

MCP
yes, local
Yes, runs locally
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 · Checked operation passed

Checked operation <host-path> -m adloop · local stdio MCP start + initialize + tools/list

Agent-reported scope: Start the AdLoop stdio MCP server (README: 'From source' install, then MCP server via .venv/bin/python -m adloop per the Claude Code snippet) and call initialize + tools/list

MCP server returned: AdLoop · version 4.1.1.

MCP tools returned: health_check, get_account_summaries, run_ga4_report, run_realtime_report, get_tracking_events, list_key_events, list_ga4_dimensions_and_metrics, list_gsc_sites, run_gsc_report, analyze_page_speed, list_merchant_accounts, get_merchant_feed_health, get_merchant_product_issues, list_accounts, get_campaign_performance, get_ad_performance, get_keyword_performance, get_search_terms, get_negative_keywords, get_negative_keyword_lists, get_negative_keyword_list_keywords, get_negative_keyword_list_campaigns, get_recommendations, get_pmax_performance, get_pmax_assets, get_detailed_asset_performance, get_audience_performance, get_demographic_targeting, get_change_history, analyze_campaign_conversions, landing_page_analysis, attribution_check, audit_event_coverage, list_gtm_accounts, list_gtm_containers, list_gtm_tags, get_gtm_tag, list_gtm_triggers, get_gtm_trigger, list_gtm_variables, list_gtm_workspaces, get_gtm_workspace_diff, list_gtm_versions, get_gtm_version, get_gtm_version_diff, draft_gtm_tag, draft_gtm_trigger, draft_gtm_variable, draft_delete_gtm_entity, draft_publish_gtm_workspace, draft_rollback_gtm_version, run_gaql, get_audience_lists, search_audience_segments, get_audience_targeting, draft_audience_attachment, get_shopping_product_performance, get_asset_group_signals, draft_asset_group_signals, draft_pmax_product_exclusions, draft_asset_group_assets, draft_shopping_campaign, draft_campaign, draft_ad_group, update_campaign, draft_responsive_search_ad, update_responsive_search_ad, draft_keywords, get_custom_conversion_goals, draft_custom_conversion_goal, draft_update_custom_conversion_goal, draft_assign_custom_conversion_goal, draft_clear_custom_conversion_goal, add_negative_keywords, add_negative_locations, propose_negative_keyword_list, add_to_negative_keyword_list, attach_shared_set_to_campaigns, detach_shared_set_from_campaigns, get_ai_max_settings, draft_ai_max_settings, draft_prepare_brand_exclusions, draft_demographic_targeting, update_ad_group, draft_callouts, draft_structured_snippets, draft_image_assets, pause_entity, enable_entity, remove_entity, draft_sitelinks, confirm_and_apply, upload_images, upload_conversion_csv, list_uploads, list_reddit_accounts, list_reddit_funding_instruments, get_reddit_campaigns, get_reddit_ad_groups, get_reddit_ads, get_reddit_performance, run_reddit_report, get_reddit_pixels, get_reddit_audiences, search_reddit_targeting, get_reddit_account_history, estimate_reddit_ad_group, pause_reddit_entity, enable_reddit_entity, remove_reddit_entity, update_reddit_campaign, update_reddit_ad_group, update_reddit_ad, draft_reddit_custom_audience, draft_reddit_campaign, draft_reddit_ad_group, draft_reddit_ad, draft_key_event, draft_delete_key_event, draft_create_conversion_action, draft_update_conversion_action, draft_remove_conversion_action, draft_upload_call_conversions, draft_upload_enhanced_conversions_for_leads, validate_tracking, generate_tracking_code, estimate_budget, discover_keywords, suggest_brands, check_brand_names, get_brand_lists, get_brand_list_brands, get_brand_list_campaigns, propose_brand_list, add_to_brand_list, remove_from_brand_list, attach_brand_list_to_campaigns, detach_brand_list_from_campaigns. Tool listing does not establish authenticated tool-call success.

Run details
run
kLOsk--adloop-claude-haiku-5-5-1792340528124568123
date
Oct 18, 2026
time to working
not recorded
product hosting / execution
Local stdio MCP server in the guest
recorded operation scope
product operation
model
claude-haiku-5-5
agent / version
claude-code / 2.1.300 (Claude Code)
platform
linux
reported cost
$0.009434
Recorded source
https://github.com/kLOsk/adloop
Tool transport
mcp-assigned-vm
Test version
readme-03aea4c41d53955e3723c330e9927d2a9df627f6642624cc0078a97c73a53c8a
revision
545aae42bfeed8184d7af211633cc99ac461cd1d
What the agent did

Start the AdLoop stdio MCP server (README: 'From source' install, then MCP server via .venv/bin/python -m adloop per the Claude Code snippet) and call initialize + tools/list

cd <host-path> && ls -la && cat README.md | head -300
cd <host-path> && git log -1 --format=%H 2>/dev/null; ls -la .github/workflows 2>/dev/null; cat pyproject.toml 2>/dev/null | head -60; ls <host-path> 2>/dev/null
cd <host-path> && grep -n '^#' README.md | head -80; grep -n -E 'uv |pip |adloop (init|--|mcp|serve|version|doctor)|curl|uvx' README.md | head -60; cat .github/workflows/ci.yml; cat .mcp.json
cat <host-path> | head -250; which uv python3; python3 --version
cd <host-path> && sed -n 355,400p README.md; sed -n 500,515p README.md; grep -n 'validate' <host-path> | head; ls -la .coldpass 2>/dev/null
cd <host-path> && (command -v uv || (python3 -m pip --version 2>/dev/null || sudo apt-get install -y python3-pip >/tmp/apt.log 2>&1; python3 -m pip install --user --break-system-packages uv 2>&1 | tail -3)); export PATH=$HOME/.local/bin:$PATH; uv --version && uv sync 2>&1 | tail -20; echo EXIT=$?
cd <host-path> && cat > /tmp/mcp_smoke.py <<'EOF'
import json, subprocess, sys
p = subprocess.Popen(["<host-path>", "-m", "adloop"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd="<host-path>")
def send(d): p.stdin.write((json.dumps(d)+"\n").encode()); p.stdin.flush()
def recv():
    while True:
        line = p.stdout.readline()
        if not line: raise SystemExit("EOF; stderr=" + p.stderr.read().decode()[-2000:])
        try: doc = json.loads(line)
        except ValueError: continue
        if "id" in doc: return doc
send({"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"smoke","version":"1"}}})
init = recv(); print("serverInfo:", init["result"].get("serverInfo"))
send({"jsonrpc":"2.0","method":"notifications/initialized"})
send({"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}})
tools = recv()["result"]["tools"]
print("tools:", len(tools), [t["name"] for t in tools][:8])
p.terminate(); p.wait(timeout=5)
EOF
timeout 120 python3 -I /tmp/mcp_smoke.py; echo EXIT=$?
cd <host-path> && mkdir -p .coldpass && cat > .coldpass/probe.json <<'EOF'
{"kind":"mcp","argv":["<host-path>"}
EOF
cat > .coldpass/report.json <<'EOF'
{
  "outcome": "working",
  "operation": "Start the AdLoop stdio MCP server (README: 'From source' install, then MCP server via .venv/bin/python -m adloop per the Claude Code snippet) and call initialize + tools/list",
  "operation_scope": "Verified server startup and tool discovery only (138 tools, serverInfo AdLoop 4.1.1). Tool calls against Google Ads/GA4 were not exercised: they require OAuth via 'adloop init' (interactive, browser sign-in and a Google Cloud project), which is outside this smoke task.",
  "steps": [
    "git clone/pinned source already present in <host-path>",
    "Installed uv 0.13.1 via python3 -m pip install --user --break-system-packages uv (uv not preinstalled in guest)",
    "uv sync (README 'From source' install step; resolved and installed dependencies into .venv)",
    "Started MCP server: <host-path> -m adloop; sent initialize, notifications/initialized, tools/list; received 138 tools"
  ],
  "deviations": [
    "README 'From source' lists 'uv sync' and 'uv run adloop init'; uv was not present in the guest, so it was installed with pip first (--break-system-packages, --user).",
    "Did not run 'uv run adloop init' (interactive OAuth/Google Cloud setup, out of scope for smoke). The MCP server still starts and lists tools without credentials.",
    "Did not run the test suite (tests/ via pytest) per task instructions."
  ],
  "stuck_step": null,
  "main_blocker": null,
  "suggested_fix": null
}
EOF
rm -f /tmp/mcp_smoke.py; <env-var>=<host-path> python3 -I <host-path> --validate; echo EXIT=$?