Your jobs
Loading your jobs…
Data Input
Data input help — available column IDs
Use a column ID from Element, Oxide, Mineral,
MineralCategory or RockProperty as your CSV header.
For concentrations, append _pct, _ppm, _ppb or _wt%,
for example Cu_ppm, Au_ppb, Pyrite_pct, K_Feldspar_wt%
or WHITE_MICA_pct.
Without a suffix, the default unit below is used. RockProperty columns use the units shown below,
for example density uses g/cm³.
Elements are written as the element symbol — Cu, Au,
S, As — and oxides as the formula, such as
SiO2_pct or Al2O3_pct. Both are listed in full below, with the geochemical
group and the geological role each one plays. Element and oxide columns are the solver's main
input: minerals, categories and rock properties are observations that constrain it.
An oxide column is converted to its cation before the inversion sees it, by that
oxide's own stoichiometry — 60% SiO2 is 28.05% Si — so report the weight
percent as the laboratory gave it and do not convert first. FeO and Fe2O3
together are ferrous plus ferric iron and add up; an oxide beside the bare element it converts to
(SiO2 and Si) is refused, because counting both would double that element.
H2O, CO2 and SO3 are not inputs: the engine solves for
volatiles itself, so those columns stay Ignore/Skip.
Exact IDs take priority. Preserve their case to distinguish Chlorite (Mineral) from
CHLORITE (MineralCategory), and Feldspar from FELDSPAR.
You can specify the type explicitly, for example MineralCategory:CHLORITE_pct.
Review the detected type, column ID and unit in the preview; you can change each assignment.
Sample ID, Hole ID, Easting, Northing, Elevation, Depth, From and To are also supported. Unrecognised headers start as Ignore/Skip and are not sent, so an export does not have to be cut down before it is imported.
Example CSV
A column for every element and every mineral the service accepts, in one file — with the metadata, the mineral categories and the two rock properties — over 19 samples from two holes, and values on the ones a laboratory would have measured. Drop it straight back in to see how each column is detected: the empty ones are what may be supplied, not what has to be. It is the same file the MCP bridge installs, so an agent and a person are working from one example.
No matching column IDs.
IR spectrum — coming soon
Placeholder for IR spectrum input. Spectrum column IDs and the input format are not yet available.
Your data is safe
No assay data is permanently stored on the server. The servers are stateless: your table is read to run the solver, the results are handed straight back to you, and nothing of either is kept.
Result downloads are held only so the emailed link works, and are deleted permanently after 48 hours. Your data is yours.
Drop your assay CSV file here
Column Mapping (First 100 lines preview)
Geochemical System
| Enabled | Name | Quality | Affinity kJ/mol |
Description |
|---|---|---|---|---|
|
SILICATES
Silicate Mineral Category
|
||||
| Quartz | Load assay data | SiO2 | ||
| Andalusite | Load assay data | Al2SiO5 | ||
| Epidote | Load assay data | Ca2(Al,Fe)3(SiO4)3(OH) | ||
| Clinozoisite (Al-Epidote) | Load assay data | Ca2Al3Si3O12(OH) | ||
| Pistacite (Fe3+-Epidote) | Load assay data | Ca2AlFe2Si3O12(OH) | ||
| Piemontite (Mn3+Epidote) | Load assay data | Ca2Al2MnSi3O12(OH) | ||
| Pyroxene | Load assay data | (Mg,Fe,Ca)2Si2O6 | ||
| Clinopyroxene | Load assay data | (Ca,Mg,Fe)SiO3 | ||
| Orthopyroxene | Load assay data | (Mg,Fe)SiO3 | ||
| Sphene | Load assay data | CaTiSiO5 | ||
| Tourmaline | Load assay data | (Na,Ca)(Mg,Fe,Al)3Al6(BO3)3Si6O18(OH,F)4 | ||
| Olivine | Load assay data | (Mg,Fe)2SiO4 | ||
| Forsterite (Mg-Olivine) | Load assay data | Mg2SiO4 | ||
| Fayalite (Fe-Olivine) | Load assay data | Fe2SiO4 | ||
| Tephroite (Mn-Olivine) | Load assay data | Mn2SiO4 | ||
| Monticellite (Ca-Olivine) | Load assay data | CaMgSiO4 | ||
| Garnet | Load assay data | X3Y2(SiO4)3 | ||
| Pyrope (Garnet Mg End Member) | Load assay data | Mg3Al2Si3O12 | ||
| Almandine (Garnet Fe End Member) | Load assay data | Fe3Al2Si3O12 | ||
| Spessartine (Garnet Mn End Member) | Load assay data | Mn3Al2Si3O12 | ||
| Grossular (Garnet Ca-Al End Member) | Load assay data | Ca3Al2Si3O12 | ||
| Andradite (Garnet Ca-Fe3+ End Member) | Load assay data | Ca3Fe2Si3O12 | ||
| Pollucite | Load assay data | (Cs,Na)2Al2Si4O12·H2O | ||
|
FELDSPARS
Feldspar Mineral Category
|
||||
| Feldspar | Load assay data | (Ca,Na,K)1(Al,Si)4O8 | ||
| Albite | Load assay data | NaAlSi3O8 | ||
| Anorthite | Load assay data | CaAl2Si2O8 | ||
| K-Feldspar | Load assay data | KAlSi3O8 | ||
| Plagioclase Feldspar | Load assay data | Na0.4Ca0.6Al1.6Si2.4O8 | ||
| Ba-Feldspar | Load assay data | BaAl2Si2O8 | ||
|
Muscovite
White Mica Mineral Category
|
||||
| Muscovite | Load assay data | K0.9Al2.6Fe0.15Mg0.15Si3.4O10(OH)2 | ||
| Paragonite | Load assay data | NaAl3Si3O10(OH)2 | ||
| Celadonitic Muscovite | Load assay data | K(Al1.6Fe0.2Mg0.2)(Si3.4Al0.6)O10(OH)2 | ||
| Illite | Load assay data | K0.62(Al1.6Fe0.2Mg0.2)(Si3.78Al0.22)O10(OH)2 | ||
| Phengite | Load assay data | K(Al2.7Si3.3O10)(OH)2 | ||
|
Chlorite
Chlorite Mineral Category
|
||||
| Chlorite | Load assay data | (Fe,Mg,Mn,Al)6(Si,Al)4O10(OH)8 | ||
| Fe-Chlorite | Load assay data | Fe3.9Mg1Mn0.1Al2Si3O10(OH)8 | ||
| Mg-Chlorite | Load assay data | Mg3.9Fe1Mn0.1Al2Si3O10(OH)8 | ||
| Mn-Chlorite | Load assay data | Mn5Al2Si3O10(OH)8 | ||
|
Biotite
Biotite Mineral Category
|
||||
| Biotite | Load assay data | K(Fe,Mg,Mn,Al)3(Al,Si)4O10(OH)2 | ||
| Fe-Biotite | Load assay data | KFe2Mg0.8Al1.4Si2.8O10(OH)2 | ||
| Mg-Biotite | Load assay data | KFe0.8Mg2Al1.4Si2.8O10(OH)2 | ||
|
AMPHIBOLES
Amphibole Mineral Category
|
||||
| Amphibole | Load assay data | (Na,K)0−1(Ca,Na)2(Mg,Fe,Mn,Al)5(Si,Al)8O22(OH,F,Cl)2 | ||
| Tremolite | Load assay data | Ca2Mg5Si8O22(OH)2 | ||
| Actinolite | Load assay data | Ca2Fe5Si8O22(OH)2 | ||
| Grunerite | Load assay data | Fe7Si8O22(OH)2 | ||
| Anthophyllite | Load assay data | (Mg,Fe)7Si8O22(OH)2 | ||
| Hornblende | Load assay data | (Ca,Na)2-3(Mg,Fe,Al)5(Si,Al)8O22(OH)2 | ||
|
OXIDES
Oxide Mineral Category
|
||||
| Magnetite | Load assay data | Fe3O4 | ||
| Chromite | Load assay data | FeCr2O4 | ||
| Haematite | Load assay data | Fe2O3 | ||
| Goethite | Load assay data | FeO(OH) | ||
| Rutile | Load assay data | TiO2 | ||
| Pyrolusite | Load assay data | MnO2 | ||
| Cassiterite | Load assay data | SnO2 | ||
| Columbite | Load assay data | FeNb2O6 | ||
| Bismuth Oxide | Load assay data | Bi2O3 | ||
| Uraninite | Load assay data | UO2 | ||
| Ilmenite | Load assay data | FeTiO3 | ||
|
PHOSPHATES
Phosphate Mineral Category
|
||||
| Apatite | Load assay data | Ca5(PO4)3(OH) | ||
| Monazite | Load assay data | (Ce,La,Nd,Ca,Th)PO4 | ||
| Ce-Monazite | Load assay data | CePO4 | ||
| La-Monazite | Load assay data | LaPO4 | ||
| Nd-Monazite | Load assay data | NdPO4 | ||
| Th-Monazite | Load assay data | Ca0.5Th0.5PO4 | ||
|
CARBONATES
Carbonate Mineral Category
|
||||
| Calcite | Load assay data | CaCO3 | ||
| Dolomite | Load assay data | CaMg(CO3)2 | ||
| Ankerite | Load assay data | CaFe(CO3)2 | ||
| Magnesite | Load assay data | MgCO3 | ||
|
SULFATES
Sulfate Mineral Category
|
||||
| Anhydrite | Load assay data | CaSO4 | ||
| Thenardite | Load assay data | Na2SO4 | ||
| Barite | Load assay data | BaSO4 | ||
| Gypsum | Load assay data | CaSO4·2H2O | ||
| Jarosite | Load assay data | KFe3(SO4)2(OH)6 | ||
| K-Alunite | Load assay data | KAl3(SO4)2(OH)6 | ||
| Na-Alunite | Load assay data | NaAl3(SO4)2(OH)6 | ||
| Celestine | Load assay data | SrSO4 | ||
|
SULFIDES
Sulfide Mineral Category
|
||||
| Pyrite | Load assay data | FeS2 | ||
| Chalcopyrite | Load assay data | CuFeS2 | ||
| Sphalerite | Load assay data | ZnS | ||
| Cobaltite | Load assay data | CoAsS | ||
| Pentlandite | Load assay data | (Fe,Ni)9S8 | ||
| Galena | Load assay data | PbS | ||
| Pyrrhotite | Load assay data | FeS | ||
| Bornite | Load assay data | Cu5FeS4 | ||
| Arsenopyrite | Load assay data | FeAsS | ||
| Molybdenite | Load assay data | MoS2 | ||
| Chalcocite | Load assay data | Cu2S | ||
| Enargite | Load assay data | Cu3AsS4 | ||
| Bismuthinite | Load assay data | Bi2S3 | ||
| Greenockite | Load assay data | CdS | ||
| Stibnite | Load assay data | Sb2S3 | ||
| Acanthite | Load assay data | Ag2S | ||
|
CLAYS
Clays Mineral Category
|
||||
| Kaolinite | Load assay data | Al2Si2O5(OH)4 | ||
| Montmorillonite | Load assay data | (Na,Ca)0.3(Al,Mg)2Si4O10(OH)2 | ||
|
PHYLLOSILICATES
Phyllosilicate Mineral Category
|
||||
| Talc | Load assay data | Mg3Si4O10(OH)2 | ||
| Serpentine | Load assay data | Mg3Si2O5(OH)4 | ||
| Lizardite (Mg-Serpentine) | Load assay data | Mg3Si2O5(OH)4 | ||
| Greenalite (Fe-Serpentine) | Load assay data | Fe3Si2O5(OH)4 | ||
| Amesite (Al-Serpentine) | Load assay data | Mg2Al2SiO5(OH)4 | ||
| Antigorite (HighT-Serpentine) | Load assay data | Mg2.82Si2O5(OH)3.65 | ||
| Pyrophyllite | Load assay data | Al2Si4O10(OH)2 | ||
| Vermiculite | Load assay data | (Mg,Fe,Al)3(Al,Si)4O10(OH)2·4H2O | ||
|
HALIDES
Halide Mineral Category
|
||||
| Halite | Load assay data | NaCl | ||
|
NATIVES
Native Mineral Category
|
||||
| Graphite | Load assay data | C | ||
| Gold | Load assay data | Au | ||
| Native Copper | Load assay data | Cu | ||
Thermodynamic Instance
Mineral Assemblage Modifiers
Thermodynamics
Metamorphic facies after Maruyama et al. (1996), redrawn by Palin and others. Drag the point, click anywhere on the grid, or focus it and use the arrow keys (hold Shift for larger steps), to set the temperature and pressure the run is solved at.
Preview results do not use the thermo-volatile solver. Moving this point will not change what the live preview returns; the temperature and pressure take effect from the Robust execution mode onwards.
Options
Measurement Constraints
Live preview
Single-sample preview ready
Previews do not use tokens.
Debug: posted YAML payload (preview)
Execution Configuration & Billing
What each mode gives you
Each mode includes everything the one before it does, plus its own outputs. Pick a card to make it the active mode.
What each output is
- Mineralogy
- The normative mineral assemblage for every sample, with its predicted elemental composition.
- Mineralogy (robust)
- The same assemblage solved to convergence rather than indicatively: deeper computation per sample, and a mass balance you can report against.
- Volatiles
- Effective water activity (aH₂O), oxygen fugacity (fO₂) and CO₂ fraction (XCO₂), optimised for each sample rather than assumed for the batch.
- Formation temperature
- The mineral formation temperature that best explains each sample, solved per sample instead of taken from the thermodynamic environment you selected.
- Rock physics
- Density, hardness and magnetic susceptibility, derived from the predicted assemblage.
- Alteration properties
- Predicted alteration type and intensity for each sample.
- Rock tagging
- Lithology and composition classification of each predicted sample.
- Bayesian statistics
- A full distribution for every predicted value on every sample: the peak model plus centiles from p1 to p99, from thousands of trial assemblages per sample.
- Input sensitivity
- How strongly each input measurement drove each predicted value, sample by sample.
Token Estimation Calculator
Run Mineralis
1 Execute using the active settings
2 Receive your files by email
Results CSV +
.geochemcontext to reuse later.3 Receive your report
Your report arrives in a second email.
Sign in and load a CSV to begin.
preview YAML payload
Use this payload with the API integration guide.
Save Mineralis Context
Save a standard Mineralis .geochem YAML context, including configuration, metadata and the current assay table. Imported settings are retained. Comments and YAML anchors may be reformatted.
Before you continue
Read and accept these agreements to use your account.
User Administration
Sign in to see your balance.
Buy compute tokens
Every run is charged in full, including a repeat of a batch you have run before. Previews are free and are never charged.
Checking whether top-ups are available…
Whole units of currency, before tax — this is what you are spending, not a number of tokens. How many compute tokens it buys, and the total including tax, are on the ledger below.
| Compute tokens purchased | — |
|---|---|
| Price per compute token | — |
| Cost of tokens | — |
| Tax | — |
| Total to pay, including tax | — |
You will be sent to PayPal to pay, by PayPal balance or by credit or debit card — a PayPal account is not required to pay by card. Compute tokens are added to your account only after PayPal confirms the payment to Mineralis; tax is collected by PayPal and buys no tokens.
Company and tax details for your invoice — optional
Fill these in only if your invoice has to be made out to a company. They are copied onto each invoice as it is issued, and change nothing about what is charged or what tax applies.
Top-ups are charged in AUD.
Invoices
No invoices yet.
| Number | Issued | Tokens | Total | Actions |
|---|
Agreements
The versions this account has accepted, and when. Each acceptance is recorded with the exact text you were shown, so you can always check what you agreed to.
Two-step verification (SMS)
Checking your two-step verification status.
Add your mobile number to require a one-time code at every sign-in.
Enter it in full international format, for example +61412345678.
Your email address must be confirmed before a mobile can be added.
Run history
Run history across your connected apps. Open a run in its app to review results.
MCP/LLM and API Integration
Run Mineralis from an AI agent or from your own scripts. Start with a credential below, then either install the MCP server so an agent can use this service directly, or POST to the HTTP API yourself. Everything either of them runs is charged to this account at the same rate as a run started from this page.
1. Create an API credential
Every credential can run Mineralis and read its owner's run status, and none can manage credentials or reach another account. What else it may do is the scope below. The secret is shown only when created, and a credential minted here is filled into the commands further down this page automatically.
Credential in exported packets
Execution packets carry no credential.
A newly created credential is held for this browser tab only and written into the
execution YAML as mineralis.api.token, so the packet can be POSTed to /process on its own.
Anyone holding that file can spend this account's compute tokens until the credential expires or is revoked.
2. Use Mineralis from an AI agent (MCP)
The Mineralis MCP server puts this API in front of an agent: it can look up the exact
mineral, element and environment IDs, check how a CSV's columns map and what a run would cost,
run a free preview of up to 1,000 samples, and — only when you confirm the
cost — run a charged batch against this account. It runs on your own machine, talks to this
service over HTTPS, and does nothing you could not do with curl.
Assay data is passed to it by file path and read locally, so a drillhole table is never pasted into a conversation. Results come back summarised; the complete table is in the CSV this service emails you.
MINERALIS_API_TOKEN. Anything the agent runs is charged to this
account, so put the credential in the client's own configuration rather than anywhere an agent
can read it back, and revoke it here when you are done.
Install it with one command
Node 20 or newer is required. The script writes one folder
(~/.mineralis-mcp), runs npm install in it, and registers the
server with Claude Code if the claude command is on your PATH.
No execution policy change is needed: the
command loads no .ps1 file from disk, and calls npm through its
npm.cmd shim, which a Restricted policy does not block. If an
earlier attempt stopped at npm.ps1 cannot be loaded because running scripts
is disabled on this system, run the command again — it picks up where
it left off, and the files it already downloaded are reused.
Read the script before you run it if you would rather: install.sh, install.ps1. Every file it fetches is listed with its size and SHA-256 in manifest.json, and each is served from this same address.
Or do it by hand: fetch the files listed in the manifest into a
folder, run npm install there, and register
node <folder>/src/server.mjs using one of the blocks below.
Claude Code
One command, from anywhere:
claude mcp add mineralis --env MINERALIS_API_TOKEN=YOUR_TOKEN -- node /path/to/mineralis-mcp/src/server.mjs
Check it with /mcp inside Claude Code; the tools appear as mineralis_*.
Claude Desktop
Settings → Developer → Edit Config, then add the server and restart the app:
{
"mcpServers": {
"mineralis": {
"command": "node",
"args": ["/path/to/mineralis-mcp/src/server.mjs"],
"env": { "MINERALIS_API_TOKEN": "YOUR_TOKEN" }
}
}
}
The file is claude_desktop_config.json:
%APPDATA%\Claude on Windows, ~/Library/Application Support/Claude on macOS.
Codex CLI
TOML rather than JSON, in ~/.codex/config.toml:
[mcp_servers.mineralis] command = "node" args = ["/path/to/mineralis-mcp/src/server.mjs"] [mcp_servers.mineralis.env] MINERALIS_API_TOKEN = "YOUR_TOKEN" [mcp_servers.mineralis.tools.mineralis_run] approval_mode = "approve"
The last block asks you before the one tool that spends compute tokens. Worth keeping.
Grok, Cursor, VS Code and other MCP clients
Any client that speaks MCP over stdio takes the same three
things — the command node, the argument
/path/to/mineralis-mcp/src/server.mjs, and the environment variable
MINERALIS_API_TOKEN. Grok CLI reads ~/.grok/mcp.json; in
Cursor that is .cursor/mcp.json; in
VS Code it is .vscode/mcp.json or the chat.mcp settings, and
all of them use the same JSON shape as Claude Desktop above.
Nothing about the server changes between clients — that is the point of MCP.
The install includes README.md and
AGENT_GUIDE.md: the first covers the environment variables, the second is written
for the agent and documents every tool parameter. The bridge also serves the guide to the agent
as an MCP resource, so it can read it without leaving the session.
3. POST to the API yourself
POST an execution packet as YAML or JSON to run Mineralis from a script. Runs are billed to this account at the same rate as runs started from this page.
For a large batch, send the assay data as CSV instead of inline
YAML: multipart/form-data with a parameters part (the settings only)
and a data part (the CSV, first row the column IDs). The same packet is three to four
times smaller that way, gzip is understood on either part, and the assay values are read straight
from the file rather than parsed as a YAML document. Every rule is the same for both forms —
one Sample ID column, one column per property.
A result too large to return in one response comes back as its first rows plus a link to the complete table as a CSV file, which is also emailed to you. The link is valid for 48 hours.
Sign in to create an API token.
Request
Every request is a separate run and a separate charge. If a request times out, check Run history on the User Administration screen before sending it again — the run may have completed and been billed.
Token Administration
Master accounts can manage clients, projects and token allocations. Every token change records its author, reason and balance. Mineralis runs spend the signed-in user's compute balance. Client, project and legacy-user allocations are separate budgets; API credentials remain owned by each user.
Select a record to manage its allocation.
Create or edit a client / project
Use an existing ID to update its details, or a new ID to create a record with zero tokens. Allocate tokens separately above.