compuute-scan-api
Scan-as-a-Service for MCP servers. HTTP + MCP wrapper around compuute-scan — the MCP-specific static security scanner. Designed for agent-callable consumption.
POST a public GitHub repo URL → get a structured security report scored against 38 MCP-specific rules across 8 languages (TS/JS, Python, Go, Rust, C#, Java, Kotlin).
Honesty note (read first): compuute-scan is a pattern-breadth detector, not an exploitability oracle. Historic false-positive rate after manual validation is ~90% on raw output (verified against modelcontextprotocol/servers: 138 raw findings → 13 confirmed). Every response carries a
_disclaimerfield stating this explicitly. Use findings as a triage queue, not as a list of confirmed vulnerabilities. See docs/FP-RATES.md for per-rule transparency.
Live at https://scan.compuute.se. Service version reported by /v1/health.
Endpoints
Core scan
POST /v1/scan/pay with no body to read the payment requirements without paying — the request body is optional precisely so discovery probes reach the 402 instead of body validation. Verify with the Coinbase Agentic Wallet CLI:
npx awal x402 details https://scan.compuute.se/v1/scan/pay
| GET | /v1/scan/info | Scanner version + limits + supported ecosystems | none |
| GET | /v1/health | Liveness + scanner-binary availability | none |
Machine-readable contracts
MCP server (live)
Install in Claude Code: claude mcp add compuute-scan --transport http --url https://scan.compuute.se/mcp/
Discovery (/.well-known/)
Example
curl -X POST https://scan.compuute.se/v1/scan \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 00000000-0000-0000-0000-000000000001' \
-d '{"repo_url": "https://github.com/modelcontextprotocol/servers"}'
Response (truncated):
{
"repo_url": "https://github.com/modelcontextprotocol/servers",
"scanner": {"name": "compuute-scan", "version": "0.6.2", "layers_covered": ["L0", "L1"]},
"summary": {"critical": 1, "high": 94, "medium": 22, "low": 0, "files_scanned": 77},
"score": 0,
"recommendation": "AVOID — 1 critical and 94 high finding(s)...",
"top_findings": [...],
"performance": {"clone_seconds": 1.2, "scan_seconds": 0.5, "repo_size_bytes": 41234},
"_disclaimer": "PATTERN MATCH — compuute-scan is a static analyzer..."
}
Agent-shaped API features
Pricing
Full breakdown with JSON-LD: https://compuute.se/pricing.
Local development
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
export COMPUUTE_SCAN_PATH=$HOME/compuute-scan/compuute-scan.js
uvicorn main:app --reload
x402 payment env vars (all optional locally; /v1/scan/pay returns 503 until the wallet is set):
Rehearsing payments on testnet
Set X402_NETWORK=eip155:84532 to quote prices in Base Sepolia USDC, which is
free from a faucet. The CDP facilitator serves Sepolia too, so a testnet
payment exercises the real verify/settle path and your real CDP API keys —
without moving real money.
Asset address and EIP-712 domain are selected together per network: Base
mainnet USDC signs as "USD Coin", Base Sepolia as "USDC". Mixing them
fails every signature with an error that looks like a bad API key, which is
why they live in one NETWORKS table rather than separate env vars.
Mainnet is the default and an unknown value falls back to it, so a typo can
never silently ask real agents to pay in worthless testnet USDC. Check which
mode is live with curl -s https://scan.compuute.se/v1/health — the x402
block reports network and testnet.
Tests
pytest tests/ -v
# 34 tests covering scan, x402, MCP, discovery, OpenAPI
Scripts
Architecture
api/services/scan.py— clone + sandbox + scan + parse. Pure functions.api/services/x402_service.py— x402 v2 verify / settle on the officialx402SDK; CDP facilitator (Base mainnet) by default; Bazaar discovery extension in 402 bodies.api/services/cdp_auth.py— minimal CDP API-key JWT auth for the facilitator (PyJWT + cryptography; avoids the full cdp-sdk).api/serializers/scan_serializer.py— Pydantic models, strict validation.api/routes/scan.py— HTTP layer for/v1/scan: idempotency, cache, ETag.api/routes/scan_x402.py— HTTP layer for/v1/scan/pay.api/routes/discovery.py—/.well-known/*,/robots.txt,/sitemap.xml.api/mcp_server.py— FastMCP server exposingscan_mcp_server.main.py— FastAPI wiring + middleware (security headers, CORS).
Bundled compuute-scan version is pinned in the Dockerfile (ARG COMPUUTE_SCAN_REF=v0.6.2).
Documentation
Security
Found a vulnerability? See SECURITY.md — email [email protected]. We follow a 90-day coordinated disclosure window.
License
MIT (matches compuute-scan).
Author
Compuute AB — [email protected]