<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Assay — MCP Server Replacement</title>
<meta name="description" content="Assay covers 26 domains that would otherwise need separate MCP servers. One binary, zero npm dependencies.">
<link rel="stylesheet" href="style.css">
</head>
<body class="page-comparison">
__HEADER__
<main>
<h1>Comparison</h1>
<h2>Size & Speed</h2>
<p><code>FROM scratch</code> — no shell, no package manager. Rust-level cold start.</p>
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 2rem; margin-bottom: 2rem;">
<div>
<h3 style="margin-top: 0; font-size: 1rem;">Docker Image Size (compressed)</h3>
<div style="font-size: 0.75rem;">
<div style="display: flex; align-items: center; gap: 0.4rem; margin-bottom: 2px;">
<div style="background: var(--accent); padding: 0.3rem; border-radius: 3px; width: 4.7%; min-width: 4px;"> </div>
<span style="color: var(--accent); font-weight: 700;">Assay 9 MB</span>
</div>
<div style="display: flex; align-items: center; gap: 0.4rem; margin-bottom: 2px;">
<div style="background: var(--border); padding: 0.3rem; border-radius: 3px; width: 13.3%;"> </div>
<span class="text-muted">alpine/python 17 MB</span>
</div>
<div style="display: flex; align-items: center; gap: 0.4rem; margin-bottom: 2px;">
<div style="background: var(--border); padding: 0.3rem; border-radius: 3px; width: 27.3%;"> </div>
<span class="text-muted">kubectl 35 MB</span>
</div>
<div style="display: flex; align-items: center; gap: 0.4rem; margin-bottom: 2px;">
<div style="background: var(--border); padding: 0.3rem; border-radius: 3px; width: 33.6%;"> </div>
<span class="text-muted">python slim 43 MB</span>
</div>
<div style="display: flex; align-items: center; gap: 0.4rem; margin-bottom: 2px;">
<div style="background: var(--border); padding: 0.3rem; border-radius: 3px; width: 44.5%;"> </div>
<span class="text-muted">alpine/node 57 MB</span>
</div>
<div style="display: flex; align-items: center; gap: 0.4rem; margin-bottom: 2px;">
<div style="background: var(--border); padding: 0.3rem; border-radius: 3px; width: 46.9%;"> </div>
<span class="text-muted">alpine/k8s 60 MB</span>
</div>
<div style="display: flex; align-items: center; gap: 0.4rem; margin-bottom: 2px;">
<div style="background: var(--border); padding: 0.3rem; border-radius: 3px; width: 58.6%;"> </div>
<span class="text-muted">Deno 75 MB</span>
</div>
<div style="margin-bottom: 2px;">
<div style="background: var(--border); color: var(--text); padding: 0.3rem 0.5rem; border-radius: 3px; width: 82%; white-space: nowrap;">node slim 105 MB</div>
</div>
<div style="margin-bottom: 2px;">
<div style="background: var(--border); color: var(--text); padding: 0.3rem 0.5rem; border-radius: 3px; width: 89.8%; white-space: nowrap;">Bun 115 MB</div>
</div>
<div style="margin-bottom: 2px;">
<div style="background: var(--border); color: var(--text); padding: 0.3rem 0.5rem; border-radius: 3px; width: 100%; white-space: nowrap;">newman 128 MB</div>
</div>
</div>
</div>
<div>
<h3 style="margin-top: 0; font-size: 1rem;">Cold Start Time</h3>
<div style="font-size: 0.75rem;">
<div style="display: flex; align-items: center; gap: 0.4rem; margin-bottom: 2px;">
<div style="background: var(--accent); width: 3px; height: 18px; border-radius: 2px;"></div>
<span style="color: var(--accent); font-weight: 700;">Assay 5 ms</span>
</div>
<div style="display: flex; align-items: center; gap: 0.4rem; margin-bottom: 2px;">
<div style="background: var(--border); padding: 0.3rem; border-radius: 3px; width: 3.75%;"> </div>
<span class="text-muted">Bun ~30 ms</span>
</div>
<div style="display: flex; align-items: center; gap: 0.4rem; margin-bottom: 2px;">
<div style="background: var(--border); padding: 0.3rem; border-radius: 3px; width: 6.25%;"> </div>
<span class="text-muted">Deno ~50 ms</span>
</div>
<div style="display: flex; align-items: center; gap: 0.4rem; margin-bottom: 2px;">
<div style="background: var(--border); padding: 0.3rem; border-radius: 3px; width: 25%;"> </div>
<span class="text-muted">kubectl ~200 ms</span>
</div>
<div style="display: flex; align-items: center; gap: 0.4rem; margin-bottom: 2px;">
<div style="background: var(--border); padding: 0.3rem; border-radius: 3px; width: 25%;"> </div>
<span class="text-muted">alpine/k8s ~200 ms</span>
</div>
<div style="display: flex; align-items: center; gap: 0.4rem; margin-bottom: 2px;">
<div style="background: var(--border); padding: 0.3rem; border-radius: 3px; width: 37.5%;"> </div>
<span class="text-muted">alpine/python ~300 ms</span>
</div>
<div style="display: flex; align-items: center; gap: 0.4rem; margin-bottom: 2px;">
<div style="background: var(--border); padding: 0.3rem; border-radius: 3px; width: 37.5%;"> </div>
<span class="text-muted">python slim ~300 ms</span>
</div>
<div style="margin-bottom: 2px;">
<div style="background: var(--border); color: var(--text); padding: 0.3rem 0.5rem; border-radius: 3px; width: 62.5%; white-space: nowrap;">alpine/node ~500 ms</div>
</div>
<div style="margin-bottom: 2px;">
<div style="background: var(--border); color: var(--text); padding: 0.3rem 0.5rem; border-radius: 3px; width: 62.5%; white-space: nowrap;">node slim ~500 ms</div>
</div>
<div style="margin-bottom: 2px;">
<div style="background: var(--border); color: var(--text); padding: 0.3rem 0.5rem; border-radius: 3px; width: 100%; white-space: nowrap;">newman ~800 ms</div>
</div>
</div>
</div>
</div>
<p class="text-muted" style="font-size: 0.8rem;">Docker compressed pull size. Cold start = time to first instruction.</p>
<h2>Domains Covered</h2>
<p>26 domains with full coverage, 3 partial. Each would otherwise need a separate MCP server (npm process).</p>
<h2>How to Use</h2>
<p>Assay is a Lua scripting runtime, not an MCP server. Your AI agent writes scripts using Assay's stdlib modules. Use <code>assay context "<query>"</code> for LLM-ready docs.</p>
<h2>Full Coverage (26 domains)</h2>
<table>
<thead>
<tr><th>MCP Server it replaces</th><th>Assay Module</th></tr>
</thead>
<tbody>
<tr><td>modelcontextprotocol/servers (fetch)</td><td><code>http.*</code> builtins</td></tr>
<tr><td>modelcontextprotocol/servers (filesystem)</td><td><code>fs.*</code> builtins</td></tr>
<tr><td>@anthropic/mcp-server-fetch</td><td><code>http.*</code> builtins</td></tr>
<tr><td>@anthropic/mcp-server-filesystem</td><td><code>fs.*</code> builtins</td></tr>
<tr><td>mcp-server-github</td><td><code>assay.github</code></td></tr>
<tr><td>@grafana/mcp-grafana</td><td><code>assay.grafana</code> + <code>assay.prometheus</code> + <code>assay.loki</code> + <code>assay.alertmanager</code></td></tr>
<tr><td>@singlestore/postgres-mcp</td><td><code>assay.postgres</code> + <code>db.*</code></td></tr>
<tr><td>mcp-server-kubernetes</td><td><code>assay.k8s</code></td></tr>
<tr><td>mcp-server-sqlite</td><td><code>db.*</code> builtins</td></tr>
<tr><td>mcp-server-mysql</td><td><code>db.*</code> builtins</td></tr>
<tr><td>prometheus-mcp-server</td><td><code>assay.prometheus</code></td></tr>
<tr><td>argocd-mcp</td><td><code>assay.argocd</code></td></tr>
<tr><td>mcp-server-s3</td><td><code>assay.s3</code></td></tr>
<tr><td>mcp-server-jwt</td><td><code>crypto.jwt_sign</code></td></tr>
<tr><td>vault-mcp-server</td><td><code>assay.vault</code> + <code>assay.openbao</code></td></tr>
<tr><td>traefik-mcp</td><td><code>assay.traefik</code></td></tr>
<tr><td>mcp-server-temporal</td><td><code>assay.temporal</code></td></tr>
<tr><td>harbor-mcp</td><td><code>assay.harbor</code></td></tr>
<tr><td>mcp-certmanager</td><td><code>assay.certmanager</code></td></tr>
<tr><td>flux-mcp</td><td><code>assay.flux</code></td></tr>
<tr><td>crossplane-mcp</td><td><code>assay.crossplane</code></td></tr>
<tr><td>unleash-mcp</td><td><code>assay.unleash</code></td></tr>
<tr><td>velero-mcp</td><td><code>assay.velero</code></td></tr>
<tr><td>kargo-mcp</td><td><code>assay.kargo</code></td></tr>
<tr><td>zitadel-mcp</td><td><code>assay.zitadel</code></td></tr>
<tr><td>eso-mcp</td><td><code>assay.eso</code></td></tr>
<tr><td>dex-mcp</td><td><code>assay.dex</code></td></tr>
<tr><td>mcp-server-websocket</td><td><code>ws.*</code> builtins</td></tr>
<tr><td>mcp-server-crypto</td><td><code>crypto.*</code> builtins</td></tr>
</tbody>
</table>
<h2>Partial Coverage (3 domains)</h2>
<table>
<thead>
<tr><th>MCP Server</th><th>Assay Module</th><th>Note</th></tr>
</thead>
<tbody>
<tr><td>aws/mcp (S3, Lambda, EC2)</td><td><code>assay.s3</code></td><td>S3 only, no Lambda/EC2</td></tr>
<tr><td>mcp-server-git</td><td><code>shell.exec("git ...")</code></td><td>Via shell, not native module</td></tr>
<tr><td>mcp-server-docker / terraform-mcp</td><td><code>assay.harbor</code> / <code>assay.crossplane</code></td><td>Registry and infra-as-code, not Docker engine</td></tr>
</tbody>
</table>
</main>
__FOOTER__
</body>
</html>