What material.codes is
material.codes is a computational materials science platform. One conversation reaches three kinds of evidence: scientific literature from a shared paper catalog, structured records from bulk-imported materials datasets, and first-principles or machine-learning calculations run on our own compute. Answers are synthesised by a language model and carry citations back to the sources they were built from.
Getting access
Public registration is closed. Leave your email on the front page and you join the waitlist; an administrator reviews the request and sends an invitation email carrying a one-time link. Opening that link shows a registration form with your address already filled in, and submitting it creates the account and signs you in.
Invitation links are single use and expire; an expired or lost link is replaced by asking for the invitation to be sent again. If you already have an account and have forgotten your password, the sign-in page's "Forgot password?" link mails you a one-time reset link.
Lab quickstart
The Lab is where you work. Ask a question in plain language: a planner reads it and decides what the answer needs — literature, dataset records, a calculation, or several of those in parallel — and then synthesises the result as it streams back to you.
Claims in an answer carry citation markers pointing at the specific documents that were retrieved for that turn. The conversation context panel, a toggleable panel beside the chat, collects the provenance of the whole conversation: the documents that were cited, the dataset entries that were read, a breakdown by source, and the recipe the conversation is linked to. It lists sources that were queried and returned nothing too — knowing where we looked matters as much as knowing what came back.
Your library
Every account has a private library. Upload from the paperclip in a conversation, or from the library page, which accepts several files in one gesture. The file picker takes PDF, Word, plain text, Markdown, CSV, spreadsheet and JSON documents.
An uploaded document is extracted, split into chunks and embedded, after which it is searchable inside your own conversations alongside the shared catalog. Uploads are deduplicated by content within your own library, so re-uploading the same file resolves to the item you already have. A library is never visible to another user, and deleting an item removes the stored file, the extracted text and its vectors together.
Dataset queries
Four materials datasets are imported in bulk and queried directly: Materials Project, JARVIS, Alexandria and OQMD. You can search them by composition — elements a compound must contain, an exact formula — and by structural facts such as structure type or space group, as well as by numeric property ranges.
One asymmetry is worth knowing before you filter. Property rows come from Materials Project alone; the other three sources are imported for their structures, so their entries come back without property rows. An empty property list on a JARVIS, OQMD or Alexandria entry means "not published here", not "not measured". For the same reason a link out to the source record is offered only where the per-record address is known to be stable, which today means Materials Project; the other three show their identifiers as plain text rather than as a guessed URL.
Downloading structures
A crystal structure can be downloaded as CIF, POSCAR or XYZ. Geometry for the imported sources is read from their own shards; for Materials Project a record the import has not captured is fetched from the upstream API on demand.
Calculation results are downloadable more narrowly: only a Quantum ESPRESSO relaxation that was submitted with a structure records an input cell to serve. Every structure we serve is an ordered cell — one species per site, no partial occupancy — and a structure whose composition cannot be named is refused rather than written out under a filename that would misdescribe it.
MCP and API reference
material.codes speaks the Model Context Protocol over streamable HTTP at /mcp, so Claude Desktop, Cursor or any MCP-capable client can call it directly. Authenticate with an API key as a bearer token — Authorization: Bearer <your API key>. Keys are minted and revoked by you, in the Lab, once you have access.
{
"mcpServers": {
"material-codes": {
"url": "https://material.codes/mcp",
"headers": { "Authorization": "Bearer <your API key>" }
}
}
}The tools a client sees:
search— search the knowledge base and get back the matching documents with their citations, unsynthesised.query— ask the knowledge base a question and get a synthesised answer with citations.query_datasets— search the materials datasets by composition, structure and property ranges.get_properties— retrieve the stored dataset properties of one material, addressed by its identifier.
Both search tools scope the private half of the search to the key's owner, so an MCP client sees your library and nobody else's. Every request is authenticated on its own, not once per session: revoking a key, or deactivating an account, refuses the very next call. Calls are rate limited per minute, and the limit is a property of your plan rather than of the protocol.
Running calculations from chat
Ask for a property that has to be computed rather than looked up, and the planner can route the question into a real calculation. Three backends are wired: Quantum ESPRESSO and ABINIT for density-functional theory, and a MACE machine-learning potential for the cheap, approximate pass. Results land in the same answer as the retrieved evidence, and band-structure or density-of-states plots appear as a card before the narrative text finishes streaming.
Usage is metered on your plan in two independent ways: chat requests are counted per calendar month, and compute is charged by the wall-clock seconds a calculation actually ran, against a monthly allowance. Counters reset with the calendar month. Exceeding an allowance refuses the request outright rather than quietly serving a degraded one, so a result you receive is never a cheaper substitute for the one you asked for.