Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.Archerkattri/mathlas

PYPI · MATHLAS-MCP · SCANNED SEP 20

Airtight math for AI agents: 3.68M-doc theorem search + numeric/Lean verification. No LLM, no key.

Available components

0 this week 78 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security100
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs setuptools.build_meta at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
  • 0 of 5 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency35
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
  • License check failed: the license (Apache Software License) isn't a recognized OSI-approved license. See how to fix → Fail
  • Actively maintained (last published 80 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability70
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 2310 tokens (~192/item across 12 items; 12 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management87
  • Stability observed for 26 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 12 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 13 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities60
  • Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28. See how to fix → Fail
Install

How do I install the io.github.Archerkattri/mathlas MCP server?

io.github.Archerkattri/mathlas runs locally as a PyPI package, launched with uvx mathlas-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · mathlas-mcp

# add to Claude Code
claude mcp add archerkattri-mathlas -- uvx mathlas-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "archerkattri-mathlas": {
      "command": "uvx",
      "args": [
        "mathlas-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "archerkattri-mathlas": {
      "command": "uvx",
      "args": [
        "mathlas-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add archerkattri-mathlas -- uvx mathlas-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "archerkattri-mathlas": {
      "type": "local",
      "command": [
        "uvx",
        "mathlas-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add archerkattri-mathlas --command uvx --arg mathlas-mcp
# ~/.hermes/config.yaml
mcp_servers:
  archerkattri-mathlas:
    command: "uvx"
    args: ["mathlas-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "archerkattri-mathlas": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "mathlas-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add archerkattri-mathlas -t stdio -c uvx -a mathlas-mcp
// mcp.json
{
  "mcpServers": {
    "archerkattri-mathlas": {
      "command": "uvx",
      "args": [
        "mathlas-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 19 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.

  • 18 Sept 26 −2
    • Security disclosure: fail → pass functional
    • Stability: pass → 0.80 functional
  • 17 Sept 26 0
    • Stability: 0.97 → pass security
  • 16 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 15 Sept 26 +15
    • Malware scan: unverified → pass security
  • 14 Sept 26 −15
    • Malware scan: pass → unverified security
  • 13 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

  • 11 Sept 26 −2
    • Stability: pass → 0.80 functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Analysed pypi/mathlas-mcp@1.5.0

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem pypi

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted setuptools.build_meta

Background: Why install scripts are a supply-chain risk →

Dependencies 5 packages
Packages resolved 5
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 12 exposed · ~2,271 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
add_finding ~230

Ingest a web-found result into the live mathlas corpus so search_existing_math returns it immediately (provenance 'web_added'; BM25 always — no model load; full dense retrieval too if you pass dense_vec embedded in the served index's space). Use after web-searching per search_directive. Args: statement, slogan, source, optional name, optional dense_vec.

NameTypeReqDescription
dense_vecarrayOPTIONAL dense embedding of the slogan, computed BY YOU (the AI) with the SAME model the served index uses, length == the served index dim. Storing it gives the finding full dense+BM25 retrieval (fou…
namestringoptional name/title of the result
sloganstringyesa short natural-language denotation of it (what it says)
sourcestringyeswhere it came from: a URL / arXiv id / citation
statementstringyesthe web-found result's statement (the real text)
NameTypeReqDescription
dense_addedboolean
n_findingsinteger
namestring|null
notestringyeson failure (e.g. dense_vec dim mismatch) says exactly what to fix; the finding is NOT added
okbooleanyes
provenancestring|null
sloganstring|null
sourcestring|null
statementstring|null

No examples provided.

applicability_checklist ~83

Decompose a candidate theorem's statement into atomic preconditions + conclusion for YOU to verify one by one against your problem (catches misapplications like using a closed-interval theorem on an open interval). Use after search, before relying on any candidate. Args: candidate_statement (the result's statement text).

NameTypeReqDescription
candidate_statementstringyesthe candidate result's statement
NameTypeReqDescription
conclusionstringyes
instructionsstring
notestring
preconditionsarrayyes
statementstring

No examples provided.

conjecture_relation ~162

Conjecture relations for a real constant — Ramanujan-Machine style: PSLQ over a rich basis + continued-fraction/recurrence search; every candidate numerically VERIFIED to >= 25 digits but NOT proved (provenance 'conjectured_relation'). Use when identify_constant returns UNIDENTIFIED. Args: value (decimal string, MANY digits), max_terms (default 16), cf_depth (default 200).

NameTypeReqDescription
cf_depthintegercontinued-fraction evaluation depth (default 200)
max_termsintegermax PSLQ basis vector length (default 16; cost grows fast)
valuestringyesthe real constant as a decimal string (give MANY digits; PSLQ/CF search needs >16)
NameTypeReqDescription
continued_fractionsarrayyes
foundbooleanyes
integer_relationsarrayyes
notestring
querystring
simple_continued_fractionobject|null

No examples provided.

funsearch ~303

Sandboxed program-search harness (FunSearch): action='evaluate' scores YOUR Python program for problem_id ('cap_set' or 'online_bin_packing') in a no-network/timeout/rlimit sandbox; action='register' stores a scored program in the MAP-Elites DB; action='status' returns the best programs + few-shot context for writing the next variant. Use to iteratively evolve programs — YOU are the generator, mathlas is the deterministic scorer. Args: action, problem_id, then program_src (evaluate/register), score + behavior (register), timeout_s (evaluate), top_k (status).

NameTypeReqDescription
actionstringyes'evaluate' = sandbox-score program_src; 'register' = store a scored program; 'status' = best programs + few-shot context
behaviorarray(register) the behaviour descriptor from action='evaluate' (selects the MAP-Elites cell)
problem_idstringyesthe problem: 'cap_set' or 'online_bin_packing'
program_srcstring(evaluate/register) the candidate Python program source — YOU write it; it must define the problem's entry point
scorenumber(register) the score that action='evaluate' returned
timeout_snumber(evaluate) hard wall-clock timeout seconds (default 10)
top_kinteger(status) elite programs in the few-shot (default 3)
NameTypeReqDescription
acceptedboolean(register)
actionstring
behaviorarray
best_programstring|null(status)
best_scorenumber|null(status)
errorstring|nullagent-actionable: what failed and which args to fix
few_shot_contextstring|null(status) DATA for you to write the next program
notestring
okboolean(evaluate) program ran + scored
problem_idstringyes
scorenumber|null

No examples provided.

identify_constant ~128

Identify a real number's closed form, airtight: PSLQ + closed-form search, every candidate independently re-evaluated to 50+ digits, honest UNIDENTIFIED otherwise. Use when you have a numeric constant and want to know what it IS. Args: value (decimal string — give MANY digits, >16), optional basis (constant names like ['pi','e']).

NameTypeReqDescription
basisarrayoptional constant basis, e.g. ["pi","e","catalan"]
valuestringyesthe real value as a decimal string (give many digits, >16)
NameTypeReqDescription
basisarray
bestobject|nullyesbest verified candidate {expr, display, digits_agreed, provenance}, or null if honest UNIDENTIFIED
candidatesarrayyes
identifiedbooleanyes
notestring
querystringyes
unidentified_reasonstring

No examples provided.

identify_sequence ~128

Match an integer sequence against a LOCAL OEIS copy by EXACT contiguous term-match (no fuzzy scoring; honest UNDETERMINED if the data files are absent). Use when you have >= 4 integer terms and want the named sequence. Args: terms (list of integers), max_results (default 5).

NameTypeReqDescription
max_resultsintegermax OEIS matches to return (default 5)
termsarrayyesthe integer sequence to identify, e.g. [1,1,2,3,5,8,13,21] (give >= 4 terms)
NameTypeReqDescription
data_dirstring|null
identifiedbooleanyes
matchesarrayyes
notestring
querystringyes
remediationstringpresent iff local OEIS data is missing — how to get it

No examples provided.

mapping_scaffold ~86

Build the needs<->guarantees scaffold (structured questions + fill-in template) between your problem and a candidate result. Use when applicability is non-obvious and you want structure for the judgment (the judging is yours). Args: problem, candidate_statement.

NameTypeReqDescription
candidate_statementstringyesa candidate existing result's statement
problemstringyesthe problem to solve
NameTypeReqDescription
answer_templatestringyes
candidate_statementstring
checklistobject
notestring
problemstring
questionsarrayyes
signatureobject

No examples provided.

search_directive ~96

Get a STRUCTURED web-search plan for a problem — arXiv query strings, sub-fields/categories, named results to look for, and which other mathlas tools to run; mathlas makes NO web call (YOU search, then feed results back via add_finding). Use when the local index missed. Args: problem (description).

NameTypeReqDescription
problemstringyesa problem / result description to build a web-search plan for
NameTypeReqDescription
also_try_mathlas_toolsarray
arxiv_categoriesarray
arxiv_queriesarrayyes
instructionsstringyes
named_resultsarray
notestring
problemstring
signatureobject
subfieldsarray

No examples provided.

search_existing_math ~355

Find existing theorems/results for a problem from the mathlas 3.68M-doc index (dense + BM25 + RRF, fused with any live web_added findings). Use FIRST for any 'does known math solve this?' question; follow up with applicability_checklist on promising candidates. Args: query (problem/result description), k (default 10), optional corpus_dir (dataset parquets; omit to serve the prebuilt index or seed corpus), optional source_filter / source_weights to down-weight or exclude corpus sources, e.g. exclude web-mined docs when looking for canonical theorem statements.

NameTypeReqDescription
corpus_dirstringoptional dir of open theorem dataset parquets; omit to use the served index / built-in seed corpus
kintegernumber of candidates (default 10)
querystringyesa problem / result description
source_filterobjectoptional hard include/exclude of corpus sources, e.g. {"exclude": ["dolma"]} to drop web-mined docs when looking for canonical theorem statements. Keys: 'include' and/or 'exclude', values = lists dra…
source_weightsobjectoptional per-source score down-weighting, e.g. {"dolma": 0.5} to soft-demote web-mined docs (weight 0 = exclude). Source keys as in source_filter; weights >= 0 multiply the fused RRF score. Default o…
NameTypeReqDescription
candidatesarrayyes
corpusstringwhat was actually served
kinteger
live_findings_mergedinteger
nextstring
notestring
querystringyes

No examples provided.

search_formal_math ~205

Find mathlib DECLARATIONS (name + type) via the public Loogle (pattern/type queries like '?a * ?b = ?b * ?a') and LeanSearch (natural-language queries) services — the ONE tool that itself calls the web; honest 'service unavailable' if down (though a <=7-day-old cached response for the same query is then served, clearly labeled 'cached' with its age). Use when you need the formal Lean name/type of a result, e.g. before writing a verify_formal snippet. Args: query, k (default 10), backend ('auto'|'loogle'|'leansearch').

NameTypeReqDescription
backendstring'loogle' = pattern/type, 'leansearch' = natural language, 'auto' = both (default)
kintegermax merged hits (default 10)
querystringyesnatural language (leansearch) or a Loogle pattern/type query
NameTypeReqDescription
backendstring
backendsobjectper-service block {available, hits, error, cached?, cache_age_seconds?} — cached=true means the live service failed and these hits are the last successful response (clearly labeled)
hitsarrayyes
notestring
querystringyes

No examples provided.

verify_formal ~379

Run the REAL Lean 4 kernel (NO LLM). Two modes: (1) pass `lean` (a full snippet, e.g. 'example : 2 + 2 = 4 := rfl') to typecheck it as-is; (2) pass `proof` to PROOF-CHECK — `statement` must then be the Lean 4 proposition and `proof` YOUR proof (term or 'by ...' tactic block); mathlas builds `theorem _mathlas_check : <statement> := <proof>` and the kernel returns proof_status VERIFIED_PROOF / REFUTED (kernel_error carries the kernel's exact complaint — use it to repair the proof and re-call) / UNDETERMINED (no toolchain / timeout / unresolvable import — honest, never fake). sorry/admit are REJECTED. mathlas never writes proofs, only checks them. Find declaration names first with search_formal_math. Args: statement, lean?, proof?.

NameTypeReqDescription
leanstringLean 4 snippet to kernel-check as-is, e.g. "example : 2 + 2 = 4 := rfl" (omit both this and `proof` and the verdict is an honest UNDETERMINED — statement text alone is not checkable)
proofstringYOUR Lean 4 proof of `statement` — a term ('rfl') or tactic block ('by\n intro n\n rfl'). Checked by the real kernel; on REFUTED, repair using `kernel_error` and re-call. sorry/admit holes are reje…
statementstringyesthe claim being checked; with `proof` it MUST be the Lean 4 proposition to prove, e.g. '∀ n : Nat, n + 0 = n'
NameTypeReqDescription
appliesboolean|null
checkedbooleanyestrue iff the Lean kernel actually ran and gave a verdict
declarationstringproof mode only — the exact declaration the kernel checked
detailstring
kernel_errorstring|nullproof mode, REFUTED only — the kernel's error verbatim; the repair-loop payload
lean_availablebooleanyes
lean_providedboolean
modestring'proof_check' iff `proof` was supplied
notestring
proof_providedboolean
proof_statusstringproof mode only — the kernel's verdict on YOUR proof
remediationstringpresent iff not checked — exactly what unblocks a real kernel check
statementstring
tierstring
typechecksboolean|nullyes

No examples provided.

verify_numeric ~116

Airtight check that a closed-form expression equals a numeric value: independent sympy re-evaluation at higher precision, verified only on >= 20 agreeing digits. Use BEFORE asserting any numeric identity. Args: value (decimal string), closed_form (e.g. 'pi**2/6', 'zeta(3)').

NameTypeReqDescription
closed_formstringyesa closed-form expression, e.g. "pi**2/6" or "zeta(3)"
valuestringyesthe value as a decimal string
NameTypeReqDescription
closed_formstring
digits_agreedintegeryes
errorstring|null
min_digits_requiredinteger
notestring
reevalstring|null
valuestring
verifiedbooleanyes

No examples provided.

Common questions

What is the io.github.Archerkattri/mathlas MCP server?

io.github.Archerkattri/mathlas is an MCP server listed in the public MCP registry as io.github.Archerkattri/mathlas. Airtight math for AI agents: 3.68M-doc theorem search + numeric/Lean verification. No LLM, no key. This page covers its PyPI package (mathlas-mcp).

Is the io.github.Archerkattri/mathlas MCP server safe to use?

io.github.Archerkattri/mathlas scores 78 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.Archerkattri/mathlas MCP server expose?

io.github.Archerkattri/mathlas exposes 12 tools: identify_constant, identify_sequence, search_existing_math, search_formal_math, verify_numeric, and 7 more. Their descriptions and schemas cost roughly 2,271 tokens of context every time the server is loaded.

Is the io.github.Archerkattri/mathlas MCP server still maintained?

io.github.Archerkattri/mathlas is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.