# Wafergraph MCP (remote · wafergraph-mcp.jwpalm99.workers.dev)

Read-only MCP server for wafergraph.com's semiconductor & AI supply-chain data: 30 tools, no auth.

- Trust score: 62/100 (medium)
- Change this week: +1
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `wafergraph-mcp.jwpalm99.workers.dev`: 62/100 (this document), [markdown](https://verifymcp.io/servers/com-wafergraph-wafergraph-mcp/wafergraph-mcp.md), [page](https://verifymcp.io/servers/com-wafergraph-wafergraph-mcp/wafergraph-mcp)

## Channel facts

- Endpoint: `https://wafergraph-mcp.jwpalm99.workers.dev/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.2.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Endpoint Security**: 46/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not fully verified: no authorisation is required to call this server, and 30 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe.
  - HTTPS not yet verified: we couldn't determine whether a plaintext access path exists.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 71/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 4259 tokens (~141/item across 30 items; 30 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add --transport http com-wafergraph-wafergraph-mcp https://wafergraph-mcp.jwpalm99.workers.dev/mcp
```

### Codex

```toml
[mcp_servers.com-wafergraph-wafergraph-mcp]
url = "https://wafergraph-mcp.jwpalm99.workers.dev/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-wafergraph-wafergraph-mcp": {
      "type": "remote",
      "url": "https://wafergraph-mcp.jwpalm99.workers.dev/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-wafergraph-wafergraph-mcp --url https://wafergraph-mcp.jwpalm99.workers.dev/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-wafergraph-wafergraph-mcp:
    url: "https://wafergraph-mcp.jwpalm99.workers.dev/mcp"
```

### Other

```json
{
  "mcpServers": {
    "com-wafergraph-wafergraph-mcp": {
      "type": "http",
      "url": "https://wafergraph-mcp.jwpalm99.workers.dev/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 62, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-01 (score 61, −2)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-31 (score 63, +1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 62, +1)

No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-29 (score 61, −1)

- [functional regression] Schema quality: pass → fail
- [functional] Server version: 1.1.1 → 1.2.0
- [functional] New tool “find_common_suppliers”
- [functional] New tool “find_consolidation_hotspots”
- [functional] New tool “find_deals_by_company”
- [functional] New tool “find_paths_between”
- [functional] New tool “find_similar_companies”
- [functional] New tool “find_single_source_dependencies”
- [functional] New tool “get_country_profile”
- [functional] New tool “get_dataset_stats”
- [functional] New tool “get_deal”
- [functional] New tool “get_segment_leaders”
- [functional] New tool “get_subsegment”
- [functional] New tool “get_upstream_concentration”
- [functional] New tool “list_countries”
- [functional] New tool “list_subsegments”
- [functional] New tool “rank_by_connectivity”
- [functional] New tool “rank_by_market_cap”
- [functional] New tool “resolve_ticker”
- [functional] New tool “simulate_disruption”
- [functional] New tool “get_ma_activity_summary”
- [functional] New tool “compare_countries”
- [functional] New tool “filter_companies”

### 2026-07-28 (score 62, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-27 (score 61, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-26 (score 61)

First indexed and scored.

## MCP tools (30)

### `search_companies` (~145 tokens)

Search companies

Search wafergraph's semiconductor & AI supply-chain company dataset (565 companies across 12 segments) by name/one_liner substring and/or segment and/or country. Returns a compact list capped at 25 with a total match count. Use get_segments first if you don't know valid segment ids.

Input parameters:

- `country` (string): Filter to companies headquartered in this country, e.g. 'Taiwan' (case-insensitive).
- `query` (string): Case-insensitive substring match against company name and one_liner.
- `segment` (string): Filter to companies with this taxonomy segment id, e.g. 'foundry', 'equipment_front_end' (see get_segments).

### `get_company` (~88 tokens)

Get company

Full allowed profile for one company (by id or exact name) plus its supplier/customer supply-chain edges. Includes key_products (short list of named products/lines). Fields are deliberately limited to established/trust-checked data (see README field-discipline note).

Input parameters:

- `id` (string, required): Company id, snake_case (e.g. 'tsmc', 'asml') or exact company name.

### `get_segments` (~84 tokens)

Get segments

The wafergraph taxonomy: 12 top-level supply-chain segments (materials through ai_datacenter) and their subsegments, each with a live company count, plus the market_position enum. Use this to discover valid `segment` values for search_companies/get_deals. Segment definitions are a versioned snapshot (see data.taxonomy_snapshot_date) while company counts are computed live.

### `get_supply_chain` (~111 tokens)

Get supply chain

Walk the supplier/customer graph from one focal company, up to 2 tiers up (suppliers), down (customers), or both. Mirrors the chain view on wafergraph.com's Explorer. Returns companies grouped by tier plus the edges between them.

Input parameters:

- `depth` (integer): Number of tiers to walk, capped at 2.
- `direction` (string): up = walk suppliers only, down = walk customers only, both = walk both directions.
- `id` (string, required): Focal company id or name.

### `get_deals` (~97 tokens)

Get M&A deals

Search wafergraph's semiconductor & AI supply-chain M&A corpus (74 acquisitions/mergers, including notable terminated attempts) by title/summary substring and/or segment. Returns a compact list capped at 30 with a total match count.

Input parameters:

- `query` (string): Case-insensitive substring match against deal title and summary.
- `segment` (string): Filter to deals where at least one named party is a company in this taxonomy segment id.

### `compare_companies` (~85 tokens)

Compare companies

Side-by-side comparison of 2-6 companies on the same fields, plus their shared and unique supply-chain counterparties. Cheaper and more aligned than several get_company calls when the question is comparative.

Input parameters:

- `ids` (array, required): Company ids (snake_case, e.g. ['tsmc','samsung_foundry']) or exact names. 2-6 of them.

### `get_country_exposure` (~87 tokens)

Get country exposure

Geographic concentration of the supply chain: which countries host the companies in a given segment (or across all 12 segments), ranked by company count. Answers 'how concentrated in Taiwan is advanced lithography' style questions. Country is recorded for all 565 companies.

Input parameters:

- `segment` (string): Restrict to one taxonomy segment id (see get_segments). Omit for the whole dataset.

### `find_chokepoints` (~108 tokens)

Find chokepoints

Rank supply-chain chokepoints: companies many others depend on, weighted by how concentrated their market position is. A chokepoint here means high downstream dependency plus monopoly/leader position, i.e. few substitutes. Scoring is a transparent heuristic over the public dataset, not a proprietary risk model.

Input parameters:

- `limit` (integer): How many to return (1-25, default 10).
- `segment` (string): Restrict to one taxonomy segment id (see get_segments).

### `analyze_portfolio_exposure` (~92 tokens)

Analyze portfolio exposure

Given a list of tickers or company ids, report that basket's aggregate exposure across supply-chain segments and countries, and flag where holdings share the same upstream suppliers (correlated single points of failure). Informational supply-chain analysis over public data, not investment advice.

Input parameters:

- `holdings` (array, required): Tickers (e.g. ['NVDA','TSM']) or company ids. Up to 40.

### `filter_companies` (~411 tokens)

Filter companies

Structured multi-criteria screen over all 565 companies: exact segment/subsegment/country/market_position/public filters plus a market-cap range, sortable and paginated. Use this instead of search_companies when the question is a precise filter ('leader-position analog companies in Japan under $20B') rather than a free-text match. Unknown segment/subsegment/country values just return zero results rather than erroring — call get_segments or list_subsegments first if you're not sure a value is valid.

Input parameters:

- `country` (string): Headquarters country, exact match, case-insensitive, e.g. 'Japan'.
- `has_ticker` (boolean): true = only companies with a public ticker on file, false = only companies without one.
- `limit` (integer): Max rows to return, 1-100. Default 25.
- `market_position` (string): Exact market_position: monopoly | leader | major | challenger | niche.
- `max_market_cap_usd_b` (number): Maximum market cap in USD billions (inclusive). Only ~72% of companies have a cap on file — see the response note when this is set.
- `min_market_cap_usd_b` (number): Minimum market cap in USD billions (inclusive). Only ~72% of companies have a cap on file — see the response note when this is set.
- `offset` (integer): Rows to skip, for paging past the first `limit`. Default 0.
- `public` (boolean): true = only publicly traded companies, false = only private ones. Omit for both.
- `segment` (string): Exact taxonomy segment id, e.g. 'foundry' (see get_segments).
- `sort_by` (string): Sort field. 'market_cap' sorts descending with unpriced companies last; 'name'/'country' sort ascending. Default 'market_cap'.
- `subsegment` (string): Exact taxonomy subsegment id, e.g. 'litho' (see list_subsegments).

### `list_subsegments` (~141 tokens)

List subsegments

Every subsegment across wafergraph's 12-segment taxonomy, each with its live company count and parent segment id/name, optionally filtered to one segment. Use this (or get_segments) to discover valid `subsegment` values before calling get_subsegment or filter_companies. Segment/subsegment names come from a versioned taxonomy snapshot; company counts are computed live and can include subsegment ids present in the company data but not yet in that snapshot (flagged `in_taxonomy: false`).

Input parameters:

- `segment` (string): Restrict to subsegments of this taxonomy segment id, e.g. 'materials'. Omit for all 12 segments.

### `get_subsegment` (~161 tokens)

Get subsegment

All companies in one segment+subsegment pair, as compact refs sorted by market cap descending, plus a market_position breakdown and a country breakdown computed over the FULL matching set (not just the returned page). Use list_subsegments first if you don't know valid segment/subsegment ids.

Input parameters:

- `limit` (integer): Max companies to return, 1-100. Default 50.
- `offset` (integer): Companies to skip, for paging past the first `limit`. Default 0.
- `segment` (string, required): Taxonomy segment id, e.g. 'equipment_front_end' (see get_segments).
- `subsegment` (string, required): Taxonomy subsegment id within that segment, e.g. 'litho' (see list_subsegments).

### `find_similar_companies` (~117 tokens)

Find similar companies

Nearest structural neighbours to one focal company, ranked by a transparent Jaccard-similarity score — not a market or competitive judgment. Use search_companies or resolve_ticker first if you only have a ticker or an approximate name, then pass the resolved id here.

Input parameters:

- `id` (string, required): Focal company id (snake_case, e.g. 'tsmc') or exact name to find neighbours for.
- `limit` (integer): How many similar companies to return, 1-25. Default 10.

### `rank_by_market_cap` (~155 tokens)

Rank by market cap

Top N companies by market cap, optionally restricted to a segment/country/market_position, with the priced-coverage ratio for that scope attached — about 28% of companies dataset-wide have no market_cap_usd_b on file, so a plain top-N list without the coverage number would look more complete than it is.

Input parameters:

- `country` (string): Restrict to companies headquartered in this country, case-insensitive.
- `limit` (integer): How many companies to return, ranked highest market cap first, 1-100. Default 10.
- `market_position` (string): Restrict to companies at this market_position.
- `segment` (string): Restrict to one taxonomy segment id (see get_segments).

### `resolve_ticker` (~126 tokens)

Resolve ticker

Batch-resolve up to 25 strings — tickers, company names, or ids, in any mix — to canonical company refs. Call this FIRST whenever you have raw user input (a ticker list, pasted names) and need valid ids before calling other tools; unresolved entries come back with up to 3 suggested close matches instead of just null.

Input parameters:

- `queries` (array, required): Up to 25 strings to resolve, e.g. ['NVDA', 'TSMC', 'asml']. Each may be a ticker, an exact/partial company name, or a company id.

### `list_countries` (~143 tokens)

List countries

Every country in wafergraph's semiconductor & AI supply-chain dataset (29 countries across 565 companies) with company count, which segments are present there (with counts), public/private split, and priced market-cap totals. Sorted by company count descending. Optional segment filter. country is the company's HEADQUARTERS country only, not a manufacturing-footprint field. A company headquartered here may fabricate, assemble, or test elsewhere — do not read this data as production geography.

Input parameters:

- `segment` (string): Restrict to companies with this taxonomy segment id, e.g. 'foundry', 'memory' (see get_segments). Case-insensitive. Omit for all segments.

### `get_country_profile` (~150 tokens)

Get country profile

Deep profile of one country's presence in wafergraph's semiconductor & AI supply-chain dataset: company count, segment breakdown, market-position breakdown, top companies by market cap, notable monopoly/leader companies, and inbound/outbound supplier-relationship edge counts across this country's border (computed from the supply-chain graph). country is the company's HEADQUARTERS country only, not a manufacturing-footprint field. A company headquartered here may fabricate, assemble, or test elsewhere — do not read this data as production geography.

Input parameters:

- `country` (string, required): Country name, e.g. 'Taiwan', 'United States', 'South Korea'. Case-insensitive; common short forms (USA, UK, Korea) are recognized.

### `compare_countries` (~133 tokens)

Compare countries

Side-by-side comparison of 2-5 countries: aligned rows for company count, segment mix, market-position mix, and priced market cap, plus which segments each country is uniquely present in or dominant in, and which segments they all share. country is the company's HEADQUARTERS country only, not a manufacturing-footprint field. A company headquartered here may fabricate, assemble, or test elsewhere — do not read this data as production geography.

Input parameters:

- `countries` (array, required): 2-5 country names, e.g. ['Taiwan','South Korea','United States']. Case-insensitive; common short forms recognized.

### `get_segment_leaders` (~158 tokens)

Get segment leaders

Who runs a given layer of the semiconductor & AI supply chain: the companies at monopoly/leader market position in one taxonomy segment (or all 12 if none given), with country and market cap, plus a count of how many companies sit at each position (monopoly/leader/major/challenger/niche) in that segment. country is the company's HEADQUARTERS country only, not a manufacturing-footprint field. A company headquartered here may fabricate, assemble, or test elsewhere — do not read this data as production geography.

Input parameters:

- `segment` (string): A taxonomy segment id, e.g. 'foundry', 'eda_ip' (see get_segments). Case-insensitive. Omit to cover all 12 segments.

### `get_upstream_concentration` (~163 tokens)

Get upstream concentration

For one focal company: break its suppliers down by headquarters country and by segment, report an HHI concentration index (0 = spread evenly, 1 = fully concentrated in one bucket) for each dimension, and name the single most concentrated one. Always reports supplier_edge_coverage because key_suppliers is only ~58% filled dataset-wide — a company with few listed suppliers here may be under-documented, not genuinely un-dependent. country is the company's HEADQUARTERS country only, not a manufacturing-footprint field. A company headquartered here may fabricate, assemble, or test elsewhere — do not read this data as production geography.

Input parameters:

- `id` (string, required): Focal company id (snake_case, e.g. 'tsmc') or exact company name.

### `find_paths_between` (~224 tokens)

Find paths between two companies

Every documented supply path between two companies, following supplier->customer edges (e.g. 'how does NVIDIA actually depend on Shin-Etsu'). Searches up to max_depth hops in one or both directions and returns each path as an ordered list of companies, shortest first. Capped for combinatorial safety; absence of a path means undocumented, not disproven — see edge_coverage.

Input parameters:

- `direction` (string): 'downstream': paths where `from` supplies (directly or via intermediaries) to `to`. 'upstream': paths where `from` depends on `to` as a supplier. 'either': search both directions and label each path.
- `from` (string, required): Starting company id, name, or ticker.
- `limit` (integer): Max number of paths to return (1-50, default 10).
- `max_depth` (integer): Maximum path length in hops (edges). Default 3, hard-capped at 4 to bound the search.
- `to` (string, required): Target company id, name, or ticker.

### `simulate_disruption` (~190 tokens)

Simulate a supply-chain disruption

Remove one company, every company in one country, or every company in one segment from the documented supply graph and report the blast radius: which companies lose a documented supplier, how many alternative suppliers they retain in the same subsegment, and which are left with zero documented alternative (ranked first). This is a documented-edge simulation, not a forecast — see the caveat field.

Input parameters:

- `company_id` (string): Remove a single company by id, name, or ticker. Exactly one of company_id/country/segment is required.
- `country` (string): Remove every company headquartered in this country (case-insensitive exact match, e.g. 'Taiwan').
- `limit` (integer): Max number of affected companies to return, zero-alternative ones first (1-100, default 20).
- `segment` (string): Remove every company in this taxonomy segment id (see get_segments).

### `find_single_source_dependencies` (~141 tokens)

Find single-source dependencies

Screen for (customer, subsegment) pairs where the customer has exactly ONE documented supplier in that subsegment — the highest-value documented-concentration risk screen in the dataset. Optionally scoped to customers in one segment or country. Ranked by the sole supplier's downstream importance (its total documented customer count).

Input parameters:

- `country` (string): Restrict to customers headquartered in this country (case-insensitive exact match).
- `limit` (integer): Max number of single-source pairs to return (1-100, default 25).
- `segment` (string): Restrict to customers in this taxonomy segment id (see get_segments). Omit for the whole dataset.

### `rank_by_connectivity` (~174 tokens)

Rank companies by connectivity

Rank companies by documented supply-chain degree: customer count (downstream reach), supplier count (upstream dependence), or total. CRITICAL: degree measures how well a relationship is DOCUMENTED in this curated dataset, not how critical the company actually is — a well-covered firm can outrank a more essential but obscure one. See the caveat field in every response.

Input parameters:

- `country` (string): Restrict to companies headquartered in this country (case-insensitive exact match).
- `limit` (integer): Max number of companies to return (1-50, default 15).
- `metric` (string): 'customers' = downstream reach, 'suppliers' = upstream dependence, 'total' = sum of both.
- `segment` (string): Restrict to companies in this taxonomy segment id (see get_segments).

### `find_common_suppliers` (~176 tokens)

Find common suppliers

The shared-upstream question over a set of companies: given 2-15 company ids/tickers, or a segment id (uses every company in that segment), rank suppliers by how many of the input companies they documentedly serve (e.g. 'serves 9 of 12'), with each supplier's market position and country. Also reports how many input companies had no documented suppliers at all, since that makes a low overlap number ambiguous.

Input parameters:

- `company_ids` (array): 2-15 company ids, names, or tickers. Exactly one of company_ids/segment is required.
- `limit` (integer): Max number of ranked suppliers to return (1-100, default 20).
- `segment` (string): Use every company in this taxonomy segment id instead of an explicit list (see get_segments).

### `get_deal` (~113 tokens)

Get M&A deal

Full record for one M&A deal by id: title, type, value, announced date, status, all parties with their resolved company refs where a dataset id exists (and the raw party name where it does not), summary, sources, and the per-deal confidence flag. Use get_deals or find_deals_by_company to find a deal id first.

Input parameters:

- `id` (string, required): Deal id as returned by get_deals/find_deals_by_company, e.g. 'amd_xilinx_2020'.

### `find_deals_by_company` (~158 tokens)

Find deals by company

Every M&A deal a company took part in, split by role (as acquirer, as target, or other). Matches by dataset id first, then falls back to case-insensitive name matching — necessary because a deal's target is frequently not itself a company in this dataset and carries a null id (e.g. AMD's acquisition of Xilinx lists acquirer id 'amd' but target id null, name 'Xilinx'). Each matched deal carries a match_method ('id' or 'name') so weaker name-only matches are visible to the caller.

Input parameters:

- `company` (string, required): Company id, exact name, or ticker to search for across all deal parties, e.g. 'amd', 'Xilinx', 'AMD'.

### `get_ma_activity_summary` (~105 tokens)

Get M&A activity summary

Aggregate view of the full 74-deal M&A corpus: counts by year (from announced date), by deal type, and by status; total and median disclosed value; and the largest deals by value. Value figures are computed only over the subset of deals with a disclosed value_usd and are never extrapolated to cover the undisclosed ones.

Input parameters:

- `top_n` (integer): How many largest-by-value deals to return, 1-25 (default 10).

### `find_consolidation_hotspots` (~138 tokens)

Find consolidation hotspots

Ranks taxonomy segments by M&A activity by mapping each deal's parties onto their companies' segments (matching by id, then falling back to case-insensitive name), then aggregating deal count and disclosed value per segment. Deals whose parties cannot be resolved to any dataset company are counted in unmapped_deals rather than dropped, so thinly-covered segments aren't silently underrepresented.

Input parameters:

- `limit` (integer): How many ranked segments to return, 1-12 (there are 12 segments total).
- `sort_by` (string): Rank segments by number of deals ('deal_count') or by summed disclosed deal value ('value').

### `get_dataset_stats` (~85 tokens)

Get dataset stats

The honesty tool: what this dataset actually contains and where it is thin. Live-computed per-field coverage for companies and deals, last_verified staleness distribution, supply-chain edge coverage, data source mode, and a plain-words list of known limitations. Call this before treating an absence of a company, deal, or edge as evidence it doesn't exist in the real market.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/com-wafergraph-wafergraph-mcp/wafergraph-mcp#diagnostics

## Score history

- 2026-08-03: 62
- 2026-08-02: 61
- 2026-08-01: 61
- 2026-07-31: 63
- 2026-07-30: 62
- 2026-07-29: 61
- 2026-07-28: 62
- 2026-07-27: 61
- 2026-07-26: 61

## Links

- Remote endpoint: https://wafergraph-mcp.jwpalm99.workers.dev/mcp
- Repository: https://github.com/jasonpalmer1/wafergraph-mcp
- Changelog RSS feed: https://verifymcp.io/servers/com-wafergraph-wafergraph-mcp/wafergraph-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-wafergraph-wafergraph-mcp/wafergraph-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/com-wafergraph-wafergraph-mcp/wafergraph-mcp
