Read-only sourced engineering materials data: every value with unit, conditions and source.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Line several materials up on one property, with each value, its conditions and its source. Values are also given in the property's canonical unit (value_canonical), so they can be ranked directly. Values measured under different conditions are listed separately and are not averaged.
For example thermal_runaway_onset or atomic_oxygen_erosion_yield
Ids from search_materials
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http materials https://spacemushroom.com/mcp
Line several materials up on one property, with each value, its conditions and its source. Values are also given in the property's canonical unit (value_canonical), so they can be ranked directly. Values measured under different conditions are listed separately and are not averaged.
| Argument | Type | Description |
|---|---|---|
| property* | string | For example thermal_runaway_onset or atomic_oxygen_erosion_yield |
| materials* | array | Ids from search_materials |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"property",
"materials"
],
"properties": {
"property": {
"type": "string",
"description": "For example thermal_runaway_onset or atomic_oxygen_erosion_yield"
},
"materials": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 12,
"minItems": 2,
"description": "Ids from search_materials"
}
},
"additionalProperties": false
}Requirements in, candidates out. Each material gets a verdict: pass (every constraint met by a sourced value), fail, or unknown (no data on a constraint, so it cannot be ruled in or out). Every constraint reports pass, fail or no_data and the strongest evidence level behind it (flown, measured, derived, inferred, estimated, predicted). By default only passes and unknowns are returned, passes first. Context narrows which values count: at_temperature (degrees C; values measured at another temperature do not count), flown_only (only values measured in the real space environment), environment, include_failed, limit. Materials with no data on any constraint are not listed: use what_is_missing to see coverage for one material.
| Argument | Type | Description |
|---|---|---|
| context | object | |
| constraints* | array |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"constraints"
],
"properties": {
"context": {
"type": "object",
"properties": {
"limit": {
"type": "integer",
"maximum": 500,
"minimum": 1
},
"flown_only": {
"type": "boolean"
},
"environment": {
"type": "string",
"description": "For example low-earth-orbit"
},
"at_temperature": {
"type": "number"
},
"include_failed": {
"type": "boolean"
}
},
"additionalProperties": false
},
"constraints": {
"type": "array",
"items": {
"type": "object",
"required": [
"property",
"op",
"value"
],
"properties": {
"op": {
"enum": [
">=",
"<=",
"=",
"between"
],
"type": "string"
},
"unit": {
"type": "string",
"description": "Unit of value, for example \"kg/m3\" or \"ksi\"; converted to the property's unit. Omit when value is already in the property's unit."
},
"value": {
"type": "number"
},
"value2": {
"type": "number",
"description": "Upper end, for between"
},
"property": {
"type": "string",
"description": "A registered property, for example density, yield_strength, max_service_temp (see list_properties)"
}
},
"additionalProperties": false
},
"maxItems": 12,
"minItems": 1
}
},
"additionalProperties": false
}The sourced record of one material: sourced numbers with conditions, method and source location, plus uses, hazards, failure modes, corrosion and supply facts. Optionally narrow to one property or fact topic.
| Argument | Type | Description |
|---|---|---|
| id* | string | The id from search_materials, for example "lithium-iron-phosphate" |
| topic | string | |
| property | string | Only claims for this property, for example thermal_runaway_onset |
| include_facts | boolean |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The id from search_materials, for example \"lithium-iron-phosphate\""
},
"topic": {
"enum": [
"use",
"hazard",
"failure",
"corrosion",
"side_effect",
"handling",
"mitigation",
"supply",
"regulation",
"history"
],
"type": "string"
},
"property": {
"type": "string",
"description": "Only claims for this property, for example thermal_runaway_onset"
},
"include_facts": {
"type": "boolean",
"default": true
}
},
"additionalProperties": false
}A plain-language definition of a technical term or abbreviation used on material pages, for example ARC, SoC or adiabatic.
| Argument | Type | Description |
|---|---|---|
| term* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"term"
],
"properties": {
"term": {
"type": "string"
}
},
"additionalProperties": false
}Every current sourced value for one material (optionally one property) in canonical units, with evidence level and a claim_id. Use the claim_id with prove_claim to see the exact source and passage.
| Argument | Type | Description |
|---|---|---|
| material* | string | |
| property | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"material"
],
"properties": {
"material": {
"type": "string"
},
"property": {
"type": "string"
}
},
"additionalProperties": false
}The property names in use, with their canonical unit and whether higher or lower is better. Use these names with get_material and compare.
| Argument | Type | Description |
|---|---|---|
| query | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"query": {
"type": "string"
}
},
"additionalProperties": false
}Everything behind one value: as printed in the source, converted, the evidence level and what it means, the conditions, and each source with the place in it (and the passage where we have it).
| Argument | Type | Description |
|---|---|---|
| claim_id* | integer |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"claim_id"
],
"properties": {
"claim_id": {
"type": "integer"
}
},
"additionalProperties": false
}Which material a code names: a UNS number, EN number or name, DIN, JIS, AISI or SAE number, ASTM or AMS specification, or trade name (for example S31600, 1.4401, SUS316, A240). Case, spaces and hyphens do not matter, and a short code also lists the codes that start with it. Each row gives the system, the code, a note (product form or a caveat) and whether the match is exact. A specification such as ASTM A240 covers many grades and returns every material that cites it. A note of "nearest equivalent" means the source itself hedges: do not treat the two as the same grade.
| Argument | Type | Description |
|---|---|---|
| code* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"code"
],
"properties": {
"code": {
"type": "string",
"maxLength": 60,
"minLength": 2
}
},
"additionalProperties": false
}Find materials by name, abbreviation or formula. Optionally filter by category slug (for example polymers, metals, energy). Returns ids to use with get_material.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| query* | string | Name, abbreviation or formula, for example "PEEK" or "LiFePO4" |
| category | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1
},
"query": {
"type": "string",
"minLength": 1,
"description": "Name, abbreviation or formula, for example \"PEEK\" or \"LiFePO4\""
},
"category": {
"type": "string"
}
},
"additionalProperties": false
}Full-text search over short passages quoted from our sources. Returns the passage, the source and the place in it. Passages are still being added, so an empty answer means none indexed yet.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| query* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"default": 5,
"maximum": 20,
"minimum": 1
},
"query": {
"type": "string",
"minLength": 2
}
},
"additionalProperties": false
}For one material and a list of properties: which have sourced data (and the strongest evidence) and which have none. "no_data" means not covered yet, not known to be safe.
| Argument | Type | Description |
|---|---|---|
| material* | string | |
| properties* | array |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"material",
"properties"
],
"properties": {
"material": {
"type": "string"
},
"properties": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 40,
"minItems": 1
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 2, 2026.
No readOnlyHint / destructiveHint annotations, so clients can't tell a read from a write without asking.
Fix: Add annotations to each tool, e.g. { readOnlyHint: true } for tools that only read.