# Scrutica MCP Server — Agent Guide

Optimized for LLM agents calling the Scrutica Model Context Protocol server. For human-readable documentation see https://scrutica.com/methodology.

## Connection

- Server URL: `https://scrutica.com/api/mcp`
- Transport: Streamable HTTP (POST + optional SSE)
- Protocol version: 2025-11-25
- Authentication: none (public read-only)
- Rate limit: 60 requests per minute per source IP (sliding window). On 429, the response includes `Retry-After` (seconds) and a JSON-RPC error with code `-32000`. Authenticated quota lifts are not offered at v0.2.

### Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json)

```json
{
  "mcpServers": {
    "scrutica": {
      "url": "https://scrutica.com/api/mcp",
      "transport": "streamable-http"
    }
  }
}
```

### Cursor config (.cursor/mcp.json)

```json
{
  "mcpServers": {
    "scrutica": {
      "url": "https://scrutica.com/api/mcp",
      "transport": "streamable-http"
    }
  }
}
```

### Claude Code

```
claude mcp add --transport http scrutica https://scrutica.com/api/mcp
```

### claude.ai (web)

Settings → Connectors → Add custom connector → paste `https://scrutica.com/api/mcp`. One-click install links for Cursor and VS Code, and the full client matrix, live at https://scrutica.com/agents.

## Tools (10 total)

### scrutica_search

Entry point for free-text queries. Returns ranked results with id, name, type, summary, URL.

Parameters: `query` (string, required), `entity_type` ('facility' | 'company' | 'sovereign_program' | 'all', default 'all'), `country` (ISO 3166-1 alpha-2, optional), `limit` (1-20, default 10).

Anti-pattern: do NOT use for BIS Entity List lookups. Use scrutica_query_export_controls instead.

### scrutica_get_facility

Full facility detail by canonical Scrutica ID. Returns operator, owner, country, power capacity, GPU inventory (where disclosed), location, data_source, source_url, is_estimated flags, any logged data-quality flags (cross-source divergence investigations), a `campus` block when the facility belongs to a multi-record campus (members with scope labels — quote the canonical member's power figure, never the sum), and a ready-made `cite` string.

Parameters: `facility_id` (string, required).

Anti-pattern: resolve facility IDs via scrutica_search first; don't pass free-text names. When search returns several results sharing a campus_id, they are one physical site at different scopes — do not sum their MW.

### scrutica_get_company

Full organization detail by canonical Scrutica ID. Returns legal name, country of HQ, organization type, parent / subsidiary references.

Parameters: `company_id` (string, required).

Anti-pattern: use scrutica_query_export_controls for BIS designation details; use scrutica_get_supply_chain for edge graphs.

### scrutica_query_export_controls

BIS Entity List designations (Federal-Register-anchored). Does NOT cover OFAC SDN or Wassenaar CCL — for an organization's OFAC SDN / NS-CMIC / Section-1260H flags, use scrutica_get_company. entity_name is a case-insensitive substring match on the designated entity's published name (no alias expansion).

Parameters: at least one of `entity_name` (substring match), `entity_id` (accepted but not yet applied as a filter — the response notes it as a planned feature; filter by entity_name or country instead), `country` (ISO alpha-2). Optional `limit` (1-50, default 20).

Returns: entity_name, entity_type, country, list_type, designation_date, removal_date, grounds, federal_register_citation, source_url (Federal Register notice URL), bis_coverage_class, coverage_note. Authority tier 1 (primary source).

### scrutica_entity_list_changes

What CHANGED in the Entity List, rather than who is on it. Designation rows arrive already grouped into per-Federal-Register-notice change events, so freshness questions ("what changed this month", "latest additions", "recent removals") do not require re-deriving notice grouping from citation strings. Removal actions are returned separately as date-keyed events — a screening list maintained from additions alone over-blocks forever.

Parameters: all optional — `limit` (1-24, default 6) change events, newest first; `weeks` (1-52, default 8) ISO-week span of the activity rollup; `company_id` to scope the log to notices touching one organization.

Returns: `events` (canonical FR citation + link, notice title / publication date / document number where resolved, derived event_date labeled with event_date_source, entity / addition / removal counts, per-country counts, a bounded entity_names sample, cross-referenced compute organizations), `removal_events`, `weekly_rollup` (counts additions AND removals per ISO week; zero-count weeks are a real quiet-Federal-Register signal, not missing data), substrate totals, and `substrate_updated_at`. Authority tier 1.

Anti-pattern: don't use this to look up one entity's designation rows — that's scrutica_query_export_controls. And don't read `substrate_updated_at` as recency: it is when the rows were last refreshed, not the date of the newest action they contain. Both dates are in the response; compare them before answering a "this month" question.

### scrutica_get_supply_chain

Supply-chain edges. 21,037 edges from a licensed supply-chain database (held under subscription, not redistributed) plus SEC Exhibit 21 (substrate snapshot 2026-07-23).

Parameters: `org_ids` (array of 1-5 strings, required), `direction` ('upstream' | 'downstream' | 'both', default 'both'), `limit` (1-100, default 25).

Returns: edges with source_org_id, target_org_id, relationship_type, supply_share, price_correlation_3m, data_source.

### scrutica_get_sovereign_program

National sovereign AI compute programs (36 programs tracked). Use `list_all: true` for the cross-country summary.

Parameters: one of `country` (ISO alpha-2), `program_id` ('sovereign-<country_code>', e.g. 'sovereign-ae', as returned by scrutica_search / list_all; regional programs — 'sovereign-eurohpc', 'sovereign-nato-aukus', 'sovereign-africa-regional' — are reachable only via program_id or list_all), or `list_all` (boolean, default false).

Returns: announced_usd, announced_govt_only_usd, committed_usd, disbursed_usd, reality_ratio, status, key_partners, governance_reach.

### scrutica_get_scenario

Geopolitical compute risk scenarios. Available: 'taiwan-strait', 'iran-threat', 'tokyo-earthquake', 'south-china-sea', 'abqaiq-2'.

Parameters: `scenario_id` (one of above).

Returns: scenario summary + interactive_analysis URL. For full propagation simulation, agent should reference the interactive_analysis URL.

### scrutica_estimate_flops

Peak/sustained BF16 FLOP estimates for hardware configurations. Returns point estimate + bounds.

Parameters: `hardware_type` (enum: H100-SXM5, H200, B100, B200, A100-80GB, MI300X, TPU-v5p), `unit_count` (positive int), `utilization` (0-1, default 0.40 — MFU sustained; range 0.20–0.50), `sparsity` ('dense' | '2:4', default 'dense' — both currently apply a 1.0× multiplier; the theoretical 2:4 2× is deliberately not credited, per the methodology page), `precision` ('fp16' | 'bf16' | 'fp8' | 'int8', default 'bf16').

Returns: peak_pflops, sustained_pflops_point_estimate, sustained_pflops_bounds (lower/upper), is_estimated: true.

Anti-pattern: do NOT present outputs as exact measurements. Always relay the bounds and the is_estimated flag.

### scrutica_get_methodology

Methodology documentation. Topics: 'flop-estimation', 'cost-index', 'compute-visibility-index', 'supply-chain-weighting', 'chokepoint-cascade', 'sovereign-execution-classification'.

Parameters: `topic` (one of above).

Returns: canonical URL + summary.

## Resources and prompts

The server also exposes MCP **resources** (application-loaded reference documents): `agent-guide` (this document), `site-reference` (the ~260KB llms-full.txt), and `methodology-<topic>` for each methodology topic. And three MCP **prompts** with the provenance discipline baked in: `facility_brief` (one facility, cited end-to-end), `export_control_changes_brief` (Entity List deltas with the quiet-period caveat handled), `verify_scrutica_number` (walk the provenance chain behind a specific figure). Discover both via `resources/list` and `prompts/list`.

## Worked examples

### Q: "What's the BIS Entity List status of Huawei?"

```
scrutica_query_export_controls({ entity_name: "Huawei" })
```

Returns Federal Register-anchored designations with dates, country, grounds, FR citation, source URL. Authority tier 1.

### Q: "What changed in the BIS Entity List this month?"

```
scrutica_entity_list_changes({})
```

Returns the newest change events (grouped per Federal Register notice) plus the 8-week activity rollup — not raw designation rows. Answer from `events[].event_date` and the rollup, and state the span you actually saw: compare the newest `event_date` against `substrate_updated_at` before calling a quiet period current. Reaching further back is `limit` (max 24), not a second call.

Do NOT answer this with scrutica_query_export_controls — that returns designation rows, from which the notice grouping would have to be re-derived.

### Q: "How does NVIDIA's supply chain depend on TSMC?"

```
1. scrutica_search({ query: "TSMC", entity_type: "company" })  // resolve to canonical id
2. scrutica_get_supply_chain({ org_ids: ["nvidia"], direction: "upstream" })
```

Returns ranked supplier edges. Edges to TSMC will appear with relationship_type, supply_share, 3-month price correlation.

### Q: "Estimate the FLOP capacity of 8,000 H100s in BF16 dense"

```
scrutica_estimate_flops({
  hardware_type: "H100-SXM5",
  unit_count: 8000,
  precision: "bf16",
  sparsity: "dense"
})
```

Returns peak ≈ 7,916 PFLOPS, sustained ≈ 3,166 PFLOPS at 0.40 MFU, with 0.7×-1.15× bounds.

### Q: "What's the reality ratio for UAE's sovereign AI program?"

```
scrutica_get_sovereign_program({ country: "AE" })
```

Returns the program record with announced vs disbursed figures, reality ratio, key partners, interdependence score.

### Q: "What happens to global compute if TSMC goes offline?"

```
scrutica_get_scenario({ scenario_id: "taiwan-strait" })
```

Returns scenario summary + interactive analysis URL (https://scrutica.com/cascade/scenarios/taiwan-strait) where the agent can direct the user for full cascade simulation with adjustable propagation parameters.

## Anti-patterns

- **Don't filter by entity name on later tools.** Resolve to canonical Scrutica IDs with scrutica_search first; downstream tools use IDs (stable across name variants and aliases).
- **Don't present estimated values as exact.** Every scrutica_estimate_flops output carries `is_estimated: true` and `sustained_pflops_bounds`. Always relay both.
- **Don't request scrutica_get_supply_chain with more than 5 org_ids per call.** The tool caps at 5 to prevent unbounded edge result sets.
- **Don't fabricate methodology details.** When asked "how is X calculated," call scrutica_get_methodology with the matching topic and relay the canonical URL — don't paraphrase from memory.

## Data quality + authority tiers

Every claim Scrutica makes traces to a source URL on the originating page. Authority tiers used in tool responses:

- **Tier 1**: primary measurement / regulatory filing (SEC EDGAR, Federal Register BIS Entity List, government measurements)
- **Tier 2**: research database / curated corpus (Epoch AI, CSET ETO, and licensed corporate-ownership / supply-chain databases held under subscription and not redistributed — themselves aggregating primary sources)
- **Tier 3**: press / analyst secondary (NYT, FT, Bloomberg, CRS reports citing analyst figures)
- **Tier 4**: inferred / Scrutica-derived (documented methodology with adjustable parameters)

When relaying Scrutica data, preserve the authority tier where the tool response includes it.

## Provenance

Every record on Scrutica carries `data_source` and `source_url` columns. When a tool returns a record, the agent should cite the source_url in any response to a user that includes a numerical claim from that record.

## Cite Scrutica

BibTeX:

```
@misc{scrutica2026,
  author = {Scrutica},
  title  = {AI Compute Infrastructure Intelligence Platform},
  year   = {2026},
  url    = {https://scrutica.com}
}
```

When citing specific estimates, include the Scrutica entity URL + a retrieval date (data updates continuously).

---

For human-readable documentation: https://scrutica.com/methodology
For the navigational llms.txt index: https://scrutica.com/llms.txt
For the full reference document: https://scrutica.com/llms-full.txt
