Silicon Almanac
Semiconductor fabs, published forecasts and their restatements, each row naming its publisher.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"record": {
"url": "https://desk.siliconalmanac.com/mcp_rpc.php"
}
}
}Remote endpoints
https://desk.siliconalmanac.com/mcp_rpc.phpstreamable-httpWhat it can do
Tool inventory
Tools (9)
🟢record_overview
Start here. What this record holds, what it refuses to do, and the latest changes. Read it before assuming what is available.
Input Schema
{
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
}🟢find_fabs(q, country, operator, type, status, ...)
Search the fab sites in the record by country, operator, kind, status, wafer size or process node. Every row names the publisher it came from; rows with no publisher are not returned.
Input Schema
{
"type": "object",
"properties": {
"q": {
"type": "string"
},
"country": {
"type": "string"
},
"operator": {
"type": "string"
},
"type": {
"type": "string"
},
"status": {
"type": "string"
},
"wafer_mm": {
"type": "integer"
},
"node": {
"type": "string"
},
"limit": {
"type": "integer",
"description": "Rows to return, 1 to 200. Default 50. The envelope always reports the true total separately."
},
"offset": {
"type": "integer",
"description": "Rows to skip, for paging."
}
},
"required": [],
"additionalProperties": false
}⚪fab_profile(id)
One fab site in full, including the note that says what this record does not know about it, and every capacity statement whose sentence covers it.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string"
}
},
"required": [
"id"
],
"additionalProperties": false
}🟢list_figures(limit, offset)
Every published forecast subject in the record and each year it has been forecast for, with how many vintages exist. Use it to find a subject_id for figure_history.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"description": "Rows to return, 1 to 200. Default 50. The envelope always reports the true total separately."
},
"offset": {
"type": "integer",
"description": "Rows to skip, for paging."
}
},
"required": [],
"additionalProperties": false
}⚪figure_history(subject_id, target)
The revision history of one published figure: every vintage, what the publisher said in their own words, the date they issued it, and the link. Includes the restatements as pairs of published values. Call this when a number is quoted and you want to know what the same publisher said before. It states no reason for any change.
Input Schema
{
"type": "object",
"properties": {
"subject_id": {
"type": "string"
},
"target": {
"type": "string"
}
},
"required": [
"subject_id"
],
"additionalProperties": false
}⚪recent_changes(days, limit, offset)
Figures that publishers restated recently, each an old value and a new value with both links. Says what changed and never what it means.
Input Schema
{
"type": "object",
"properties": {
"days": {
"type": "integer"
},
"limit": {
"type": "integer",
"description": "Rows to return, 1 to 200. Default 50. The envelope always reports the true total separately."
},
"offset": {
"type": "integer",
"description": "Rows to skip, for paging."
}
},
"required": [],
"additionalProperties": false
}⚪record_gaps(status, q, limit, offset)
What this record is missing and why each one is open. Call it before concluding a figure exists. Statuses distinguish "nobody publishes this" from "the source costs money" from "we have the URLs and have not done the work".
Input Schema
{
"type": "object",
"properties": {
"status": {
"type": "string"
},
"q": {
"type": "string"
},
"limit": {
"type": "integer",
"description": "Rows to return, 1 to 200. Default 50. The envelope always reports the true total separately."
},
"offset": {
"type": "integer",
"description": "Rows to skip, for paging."
}
},
"required": [],
"additionalProperties": false
}🟢list_sources(bucket, q, limit, offset)
Every publisher this record collects, across BOTH mechanisms: their feed, or their own sitemap. A publisher absent from one may be present in the other.
Input Schema
{
"type": "object",
"properties": {
"bucket": {
"type": "string"
},
"q": {
"type": "string"
},
"limit": {
"type": "integer",
"description": "Rows to return, 1 to 200. Default 50. The envelope always reports the true total separately."
},
"offset": {
"type": "integer",
"description": "Rows to skip, for paging."
}
},
"required": [],
"additionalProperties": false
}⚪node_bands
How named publishers have defined process-node bands such as "advanced", each as a dated statement with its wafer basis. This record defines no bands of its own.
Input Schema
{
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
}Community
Evidence