Arquimedes: Math Problem Database
A structured, deduplicated database of competition and benchmark mathematics:
1,038,963 problems across 9 datasets, each with a normalized LaTeX statement,
calibrated Mohs difficulty (1.0 to 10.0), answer metadata, and solutions in a
uniform JSON schema (v2).
- 1,038,963 problems with full statements and 99.98% domain categorization
- 797,671 written solutions: proof-sketch (797,631), strategy (22), answer-only (18)
- 277,002 model-reasoning traces (
deepmathdataset, JSONL shards) - 1,219 diagram images (SVG and JPG), content-addressed by hash
- Unified Mohs difficulty (
1.0–10.0) populated across all 1,038,963 records - Fast CLI & MCP Server: installable via
uv(arquimedesCLI andarquimedes-mcpserver) - Decontaminated Train/Eval Splits: one-command export (
972,458decontaminated train /10,533canonical eval) - Interactive Web Explorer: minimalistic browser catalog in
site/ready for GitHub Pages
Datasets
| dataset | contents | problems | notable fields |
|---|---|---|---|
numina |
NuminaMath problems, the largest dataset | 840,924 | origin tags per problem, Mohs difficulty 1.0–9.5 |
deepmath |
DeepMath problems with R1 reasoning traces | 92,334 | three model-reasoning traces per problem, difficulty rating 1–10 |
bigmath |
Big-Math-RL-Verified problems with verified answers | 77,527 | Llama-8B solve-rate difficulty note, hierarchical domain tags |
math |
MATH benchmark problems | 12,401 | difficulty levels 1 to 5, train/test split tags |
core |
curated competition problems (AMC program, IMO, HMMT, and more) | 10,645 | concept tags, course/source difficulty ratings, progressive hints, solve time |
omnimath |
Omni-MATH olympiad problems | 2,640 | difficulty rating from 1 to 9.5, contest origin tags |
olympiadbench |
OlympiadBench olympiad problems | 1,389 | diagram images (JPG), answer-type tags |
cemc |
CEMC multiple-choice contests (Gauss, Pascal, Cayley, Fermat) | 792 | five answer choices per problem, reference URLs |
aops |
competition problems with community-written solutions | 311 | collection, year, and problem code per record |
Category Distribution
| category | problems | share |
|---|---|---|
algebra |
386,699 | 37.22% |
geometry |
243,231 | 23.41% |
arithmetic |
183,930 | 17.70% |
number-theory |
129,482 | 12.46% |
probability |
38,809 | 3.74% |
combinatorics |
35,493 | 3.42% |
logic-foundations |
19,935 | 1.92% |
problem-solving-techniques |
1,225 | 0.12% |
uncategorized |
159 | 0.02% |
Per-dataset category breakdowns and field notes: docs/datasets.md.
Competition Coverage
The source.collection field labels records that come from a named
competition or benchmark:
- AMC program (
core): AHSME 1,810 · AMC 8 1,025 · AMC 10A 625 · AMC 10B 625 · AMC 10 50 · AMC 12A 625 · AMC 12B 625 · AMC 12 50 · AIME I 405 · AIME II 405 · AIME 255 · USAMO 153 · USA TST 45 · USA TSTST 48 - IMO (
core): 156 - HMMT (
core): February 2,606 · November 1,072 · Invitational 65 - CEMC (
cemc): Gauss (Grade 7) 174 · Gauss (Grade 8) 166 · Pascal (Grade 9) 134 · Cayley (Grade 10) 150 · Fermat (Grade 11) 168 - AoPS (
aops): IMO Shortlist 102 · USAJMO 91 · Canadian MO 83 · APMO 28 · Putnam 7 - OlympiadBench (
olympiadbench): 1,389 - MATH (
math): 12,401
Records in omnimath, deepmath, numina, and bigmath carry origin and domain labels in source.tags.
CLI & MCP Server (uv)
arquimedes ships a zero-dependency Python package with both a fast CLI (arquimedes) and a Model Context Protocol server (arquimedes-mcp) backed by SQLite + FTS5 (with automatic JSONL shard fallback when SQLite is absent).
Install from PyPI
The package name is arquimedes-mcp. It does not contain the problems. Download them once from the Hugging Face dataset (about 1.3 GB of shards, then a lean index of about 0.8 GB):
uvx arquimedes-mcp fetch
That copy lives in the user data directory (~/Library/Application Support/arquimedes on macOS), so the next uvx run finds it.
{
"mcpServers": {
"arquimedes": {
"command": "uvx",
"args": ["arquimedes-mcp"]
}
}
}
uvx --from arquimedes-mcp arquimedes stats
uvx --from arquimedes-mcp arquimedes search "Cauchy-Schwarz" --min-mohs 7.0 -n 5
From a checkout
# Build the local 1.7 GB SQLite + FTS5 database (~50 seconds)
uv run arquimedes build
# or a 0.8 GB index that reads solutions from the shards
uv run arquimedes build --lean
# Show corpus summary
uv run arquimedes stats
# Sub-20ms full-text search across 1,038,963 problems
uv run arquimedes search "Cauchy-Schwarz" --min-mohs 7.0 -n 5
# Sample calibrated problems by competition, category, or Mohs difficulty
uv run arquimedes sample --competition IMO --category geometry -n 3
# Inspect a full problem record with choices, answer, hints, and proof
uv run arquimedes show prob.ahsme-1950-p10
MCP server from a checkout
Add to your mcp.json or claude_desktop_config.json when the shards are already in a checkout:
{
"mcpServers": {
"arquimedes": {
"command": "uv",
"args": ["--directory", "/path/to/arquimedes", "run", "arquimedes-mcp"]
}
}
}
Exposed MCP tools (all read-only; arguments in docs/usage.md):
arquimedes_get_stats: dataset, category, competition, and solution countsarquimedes_search_problems: full-text search with category, dataset, competition, andmin_mohs/max_mohsfiltersarquimedes_sample_problems: uniform random draw among problems matching the filters, repeatable with a seedarquimedes_get_problem: full LaTeX statement, choices, answer, hints, solutions, and optional deepmath reasoning traces by id
Stability (1.x)
From 1.0.0 on, these interfaces only change in backward-compatible ways until a 2.0.0 release:
- the v2 problem record schema in
docs/schema.md: fields are not removed or renamed, and their types do not change - the MCP tool names, their arguments, and the shape of their results
- the
arquimedesCLI commands and flags, and their--jsonoutput - the SQLite tables and columns built by
arquimedes build - the
ArquimedesEnginemethodsget_stats,search,sample, andget_problem
New fields, tools, flags, and data fixes can arrive in minor and patch
releases. Corrections to individual records (a wrong answer, a mislabeled
category) are data fixes, not breaking changes. Counts and difficulty.mohs
values can change as records are corrected; mohs is a calibration, not a
measured difficulty. Changes are listed in CHANGELOG.md.
Decontaminated Train / Eval Splits
For LLM post-training and RLVR (Reinforcement Learning with Verifiable Rewards), tools/export_splits.py (or uv run arquimedes splits) produces a decontaminated training set and a canonical evaluation benchmark:
uv run arquimedes splits --out-dir splits/
- Evaluation split (
splits/eval.jsonl.gz— 10,533 problems):mathtest split (4,974),omnimath(2,640),olympiadbench(1,389),core2023+ contests (931),aops(311), andcemc2023+ contests (288). - Decontaminated training split (
splits/train.jsonl.gz— 972,458 problems): filters out 46,057 unverifiable records and strips 9,915 near-duplicate benchmark leaks detected via 5-gram token shingle overlap acrossnumina,bigmath,core,math,deepmath, andcemc.
Quickstart (Python & SQLite)
Read a problem directly from a shard with the Python standard library:
import gzip, json
with gzip.open("problems/core/shard-00000.jsonl.gz", "rt", encoding="utf-8") as fh:
prob = json.loads(fh.readline())
print(prob["title"], "Mohs:", prob["difficulty"]["mohs"])
print(prob["statement"]) # raw LaTeX with \( \) delimiters
print(prob["answer"]) # {'letter': 'd', 'value': '3+\\sqrt6'}
print(prob["solutions"][0]["text"][:200])
Query SQLite + FTS5 directly:
SELECT p.id, p.title, p.difficulty_mohs, p.answer_value
FROM problems_fts f
JOIN problems p ON p.rowid = f.rowid
WHERE problems_fts MATCH '"pigeonhole"'
AND p.difficulty_mohs BETWEEN 5.0 AND 8.5
LIMIT 10;
Layout
problems/<dataset>/shard-*.jsonl.gz gzipped JSON Lines, one v2 problem record per line
images/<hash>.svg, images/<hash>.jpg 1,219 content-addressed diagram files
data/index.json summary index (counts by dataset, category, competition)
data/problems.sqlite queryable SQLite + FTS5 database (build locally)
arquimedes/ uv-installable CLI and MCP server package
site/ minimalistic interactive web explorer (GitHub Pages)
tools/ converters, shard normalizer, split exporter, DB builder
docs/ schema, usage, and dataset documentation
Documentation
docs/schema.md: full v2 record reference, shard format, SQLite + FTS5 schema, LaTeX convention, image storedocs/usage.md: CLI, MCP server, SQL & FTS5 queries, reasoning traces, decontaminated splitsdocs/datasets.md: per-dataset contents, field notes, category distributions, deduplication rules, and upstream licenses
License
Code in arquimedes/, tools/, and site/ is MIT. The Mohs calibration, the category labels assigned by this project, and data/index.json are CC BY 4.0. Problem statements, solutions, answers, and diagrams are not relicensed; the upstream terms are in docs/datasets.md. A Hugging Face copy keeps every record and stamps the holder's notice on it: richard01172000/arquimedes. See LICENSE.
Metadata
Release files for arquimedes-mcp 1.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| arquimedes_mcp-1.1.0.tar.gz | 72.0 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| arquimedes_mcp-1.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 154.2 kB
Release files / arquimedes_mcp-1.1.0.tar.gz
| Download URL | arquimedes_mcp-1.1.0.tar.gz |
|---|---|
| Size | 72.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7567fe116236186abf47ab26ada134ef00fd56355c8d08d159d83373d108a5d9
|
|
BLAKE2b-256 checksum How to use checksums |
bb085eee8137d1a629aad5e68ea4a62a80174236d20287f47c2d4cd2dd5ed61f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / arquimedes_mcp-1.1.0-py3-none-any.whl
| Download URL | arquimedes_mcp-1.1.0-py3-none-any.whl |
|---|---|
| Size | 82.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1ee1d3c60e296514d383478389aec2e789832f3a3eb1ac66dfbe4a5d8e7a0ea1
|
|
BLAKE2b-256 checksum How to use checksums |
68594602da395cee0a2082c22e6df85b6d9a72ccbd59f9623007dcbc284a695e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for arquimedes-mcp 1.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.