Silicon Almanac

Semiconductor fabs, published forecasts and their restatements, each row naming its publisher.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
70%
Naming quality
91%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~962Tokens (tool definitions)
~705 BTypical response size
Moderate attention impact (0.75% of 128k context)

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-http

What it can do

Tool inventory

Tools (9)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded9 tools