anacraftCAUTION
Google Analytics, mined block by block — Minecraft-themed TUI dashboard for GA4
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
⛏ craft
Ask GA4 in plain English.
Connects your assistant to Google Analytics 4 through an MCP server, so you can ask how your site is doing and get the answer from your own numbers. Its dashboard at app.anacraft.dev creates the property and hands you the tag; the CLI audits what it is measuring so you can fix what is wrong, and reads it back as a terminal dashboard.
anacraft.dev · Releases ·
craft dash --demo · osaka-jade · 132×52
Install
macOS / Linux
curl -fsSL https://anacraft.dev/install.sh | bash
Installs to /usr/local/bin when that is writable, otherwise ~/.local/bin — never with sudo. Set INSTALL_DIR to choose somewhere else:
curl -fsSL https://anacraft.dev/install.sh | INSTALL_DIR=~/bin bash
From source
cargo install --git https://github.com/mehfuzh/anacraft
Manual — grab a binary from Releases, extract it, and put anacraft on your PATH.
Quick start
anacraft with no command ope
681c37fb61ffOBSERVED · 2026-10-11Exposed tools (10)
9 read · 1 write · 0 destructive.
| Tool | Risk | Description |
|---|---|---|
configure_site | write | Set up GA4 for a domain the account does not measure yet: creates the \ property and its web data stream and returns the gtag.js snippet to paste \ into the site |
list_countries | read | Countries the period |
list_events | read | Events over the period, ranked by count, with the per-day total for this \ period and the one before it so a rise or fall is visible. |
list_pages | read | Most-visited pages over the period, ranked by page views. |
list_properties | read | Every GA4 property the signed-in account can read, and which one is the \ saved default. Read-only: this cannot change the default. |
list_referrers | read | The URLs that sent traffic, ranked by sessions. Use this for \ |
list_traffic_sources | read | Where traffic arrives from, as GA4 |
live_visitors | read | Who is on the site right now — active users in the last 30 minutes, broken \ down by country. Realtime, so it ignores the |
search_events | read | Events whose name contains a substring, ranked by count — \ \ |
search_pages | read | Pages whose path contains a substring, ranked by page views — \ \ |
Trust audit
CAUTIONgrade B · trust 88/100 Install with care. The audit found things worth knowing before you trust its output.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | WARN |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (8 observation(s))
- Network
- declared (11 observation(s))
- Shell
- none-observed
- Dependencies
- pinned
- Secrets in source
- none-found
Findings (21)
title: "Beacon Lit",
assert!(!found.iter().any(|a| a.title == "Beacon Lit"));
.nojekyll
const STYLE: &str = include_str!("../../assets/serve.css");("layout.html", include_str!("../../templates/layout.html")),("start.html", include_str!("../../templates/start.html")),("signin.html", include_str!("../../templates/signin.html")),("waiting.html", include_str!("../../templates/waiting.html")),Then point the client at `http://127.0.0.1:7777/v1/mcp`:
claude mcp add --transport http anacraft http://127.0.0.1:7777/v1/mcp \
<pre class="code">http://127.0.0.1:7777/v1/mcp?token=<token></pre>
'http://127.0.0.1:7777/v1/mcp?token=<token>'</code> — and a client with somewhere to put a
<span class="d"> anacraft serving on http://127.0.0.1:52413</span>
<p>The webhook Slack hands back is a credential: anyone holding it can post to that channel. So it
<p>The server owns the flow, because it owns the credentials. <code>POST /v1/session</code> opens the
read with your own credentials and published as one integer, against an id that names nothing.
curl -fsSL https://anacraft.dev/install.sh | bash
| `found nowhere writable to install to` | Installer could not write to `/usr/local/bin` or `~/.local/bin` | `INSTALL_DIR=~/bin curl ... \| bash` |
| `could not work out the latest release` | GitHub API unreachable or rate-limited | `VERSION=v0.6.0 curl ... \| bash` to pin one |
curl -fsSL https://anacraft.dev/install.sh | bash
<span class="c">curl -fsSL https://anacraft.dev/install.sh | bash</span>
Gates applied: no_behavioural_pass.
681c37fb61fffull audit observations/trust-audit/mcp-server/mehfuzh__anacraft.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-11 | 681c37fb61ff | CAUTION | B | 88 | first audit |
Questions
What is the anacraft MCP server?
Google Analytics, mined block by block — Minecraft-themed TUI dashboard for GA4
What tools does anacraft expose?
10 in total: 9 read-only, 1 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.
Is anacraft safe to connect to an agent?
With care. The audit graded it B (88/100) and found 21 things worth knowing before you trust this server, listed below with the exact line each was found on.
What credentials does anacraft need?
It reads GITHUB_TOKEN, STRIPE_SECRET_KEY and SUPABASE_SERVICE_ROLE_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does anacraft run?
It speaks streamable-http, so it runs as a service you connect to over the network.
How current is this page?
The grade is for one exact copy of the source (681c37fb61ff), read on 2026-10-11. The repository is watched and re-audited when it changes.