An MCP server that lets anyone point their own AI agent (Claude Code, Claude Desktop, Cursor, …) at Georgetown CSET's ETO Advanced Semiconductor Supply Chain dataset and ask questions about it in natural language.
It's powered by SLayer: the dataset is modeled as a semantic layer (measures / dimensions / filters / joins), and SLayer's built-in MCP server exposes that layer as tools. The connecting agent decides what to ask; SLayer compiles each request to SQL and runs it. No LLM key or model is needed on this side — the user's own agent provides the intelligence.
Your AI agent ──MCP──▶ SLayer MCP server ──▶ SQLite (the 5 ETO CSVs)
(query / inspect / models_summary / search tools) grounded, no hand-written SQL
Once connected, the agent can call SLayer's tools, including:
| Tool | What it does |
|---|---|
models_summary |
Lists the available models and their descriptions |
inspect |
Full detail of a model: columns, measures, joins |
query |
Runs a structured query (measures / dimensions / filters / order) |
query_nested |
Multi-stage queries |
search |
Retrieval over model/entity metadata |
provision is the central fact table — one row = a provider's market-share % of a
supply-chain node in a year. It joins to providers (countries / companies) and
inputs (the tools / materials / processes), which joins to stages
(Design / Fabrication / Assembly-Testing-Packaging). Models live in
slayer_models.py with descriptions on every model and column, so
the agent picks correct fields instead of guessing.
Each user runs the server locally; their agent talks to it over stdio. You need
uv installed (curl -LsSf https://astral.sh/uv/install.sh | sh).
git clone <this-repo> chip-mcp && cd chip-mcp
# 1. Build the database + semantic models (writes ./slayer_data).
uv run --with motley-slayer python setup_mcp.pysetup_mcp.py prints the exact connect commands with absolute paths. They look like:
Claude Code
claude mcp add chip-supply-chain -- \
uvx --from motley-slayer slayer mcp --storage /ABS/PATH/chip-mcp/slayer_dataClaude Desktop / Cursor / generic — see
examples/claude_desktop_config.json (replace the
path with the one setup_mcp.py printed), then restart the client.
Then ask your agent:
"List the available models, then tell me who dominates EUV lithography tools."
Re-run
setup_mcp.pyif you move the folder — the datasource records an absolute path to the SQLite file.
Host it once so non-technical users connect an agent to a single URL.
On Replit: import this repo and press Run. The .replit config runs
setup_mcp.py then slayer serve, which mounts the MCP server over SSE. Agents connect to:
https://<your-repl-url>/mcp/sse
See examples/mcp_remote_sse.json for client config, or
for Claude Code:
claude mcp add chip-supply-chain --transport sse --url https://<your-repl-url>/mcp/sseRun it anywhere else with:
pip install -r requirements.txt
python setup_mcp.py
slayer serve --storage ./slayer_data --host 0.0.0.0 --port 8080
⚠️ Security: the hosted endpoint is unauthenticated and SLayer's MCP also exposes write tools (create_model,edit_datasource,save_memory, …). For a public deployment, put it behind auth / a reverse proxy, or prefer the local stdio mode where each user runs their own copy. The underlying data is read-only either way (a SQLite snapshot), so worst case is someone editing the in-memory model definitions.
| Path | What it is |
|---|---|
data/*.csv |
The five ETO source files |
data/build_db.py |
Builds the typed SQLite DB from the CSVs |
slayer_models.py |
Datasource + 5 SLayer models (descriptions, measures, joins); build_storage() |
setup_mcp.py |
Builds everything and prints connect instructions |
examples/ |
Ready-to-edit MCP client configs |
.replit, replit.nix |
Hosted SSE deployment |
- Data is a snapshot (mostly 2019–2024 figures from CSET / TechInsights); it isn't live.
share_providedis a percentage of a node's global market.- Some
provisionrows are countries, some are companies (provider_type). - Data © Georgetown CSET (ETO). SLayer is MIT-licensed.