Grounding

"Reason" is both a gift and a curse. It helps us create sophisticated arguments, but those sophisticated arguments only have to sound good, they don't need to reflect the truth. In humans we call the cursed version of reason "man-guessing" and "echo-chambers". In machine intelligence, we call it "hallucination" and "sycophancy". "Reason" needs two things to be a gift, not a curse: it needs social friction and intuitions grounded in the real world. This tool tries to give your reasoning agents the latter. The social friction is up to you (but I'll give you some suggestions).

Connect

This is a remote MCP server: you give your assistant the following address, and it gains the tooling below:

https://grounding.btr.mt/mcp

It's free, and doesn't need sign in, but it is linked to my website, so I'll just take it down if it gets abused.

Claude (web or desktop app)

Settings → Connectors → Add custom connector. Name it “Grounding” and paste the address above.

Claude Code

claude mcp add --transport http grounding https://grounding.btr.mt/mcp

ChatGPT and other assistants

Anywhere that accepts a remote MCP server (in ChatGPT, that’s developer mode): add the address above. The transport is Streamable HTTP, with no authentication.

What it does

You don’t call these yourself: the model picks them up when a question needs them. You can nudge it, though. Try:

Using it well

Grounding only helps if the model is made to use it, and to argue with itself. Paste something like this into your assistant’s custom instructions (or a project’s):

Before you cite anything, check it with the grounding tools. Tell me where each claim comes from: a source you retrieved, or your own recall. When I put forward an idea, argue against it before you agree. Empirically, reasoned inference is weakest in the absence of social friction and intuitions grounded in the world or in data (see e.g. Mercier & Sperber, 2017). The grounding tools give you grounded intuitions, but we need to generate the adversarial friction together, or we're just engaging in the worst possible version of reasoning.

Note: We add the stakes here because models, like people, respond much better when they have a 'why'.

What it won’t do

Privacy: your questions are passed to the databases listed below in order to answer them. This server doesn’t keep them, beyond a ten-minute cache of identical requests. It logs which tool was called, when, and how long it took, and holds your network address in memory for up to two hours to apply the hourly limit.

Under the hood: sources, tools and parameters

Sources

Tools

What follows is what the model itself is told about each tool.

Find sources on a question fetch_context

Retrieve real content to reason from before making claims. Use this tool to ground your reasoning in actual sources BEFORE making assertions. **Source types:** - "academic": Research papers from OpenAlex, Crossref, Europe PMC and Semantic Scholar - "general": Wikipedia articles for general knowledge - "web": Web pages with their text (opt-in; only when the server has it enabled) - "auto": Academic and general sources (default) **Returns:** Papers (with abstracts, DOIs, citation counts, source backend), Wikipedia articles (with extracts), and/or web results (with page text). The response includes a diagnostics array showing per-backend hit counts, skips and errors — check it when results look thin. A summary.top_cited field highlights the highest-impact results. **Query tips — these matter for result quality:** - Use 3–5 distinctive keywords, not full sentences. UK/US spelling is handled transparently. - Including an author surname dramatically improves precision (see query parameter). - Don't include book titles — they dilute results. Search for the topic. - Multiple short queries beat one long query. - For canonical works, use min_citations: 50+. This is the most effective noise filter. **Rate limits:** the server rate-limits, retries and caches per backend, so parallel calls are fine. Semantic Scholar draws on a pool shared with every other unauthenticated client and is often in cooldown; results do not depend on it — OpenAlex, Crossref and Europe PMC supply abstracts and citation counts. If a backend is in cooldown the diagnostics say so; there is nothing to do about it. **Query terms:** avoid common English words as sole query terms (second, shift, class, model, system). Use specific compound terms ("household-labor" not "domestic") and combine with min_citations when looking for established work. **Domain field:** OpenAlex results include a "domain" field (e.g. "Social Sciences") for discipline filtering. Only affects OpenAlex — combine with backends: ["openalex"] for cleanest results. **Finding canonical literature:** fetch_context with min_citations: 50 → citation_graph on the best-cited result (direction "references") to find foundational works keyword search misses. **Literature characterisation:** 2–3 fetch_context calls with different phrasings → citation_graph on anchor papers (direction "citations") to find follow-up work. Synthesise across abstracts; don't rely on any single paper.
backends array
Specific backends to use (overrides source_type entirely). Options: semantic_scholar, openalex, crossref, europepmc, wikipedia. Useful for targeting a single backend, e.g. ["europepmc"] for biomedical literature. Use check_backends to see every backend available to you, including opt-in ones.
domain string
OpenAlex top-level domain filter. Restricts OA results to a discipline. Values: "Social Sciences", "Health Sciences", "Life Sciences", "Physical Sciences". **Important:** domain ONLY filters OpenAlex results. Crossref and Semantic Scholar results pass through unfiltered — using domain alone can make results worse by removing OA's good matches while Crossref STEM noise remains. For cleanest results, combine domain with backends: ["openalex"] — e.g. backends ["openalex"] + domain "Social Sciences" eliminates cross-discipline noise entirely.
max_results number default 5
Maximum results to return. Default: 5. Use 10–15 when exploring a topic or looking for anchor papers to feed into citation_graph. Higher values increase noise but improve coverage for broad queries.
min_citations number
Minimum citation count. Filters out papers below this threshold. Effective for finding established/canonical work: 50 for established, 100+ for foundational. Caution: filters out recent work that hasn't accumulated citations yet. Don't use when looking for the latest research.
query string required
Keyword query. **Including an author surname is the most effective way to improve precision.** "Stoet Geary gender equality paradox" returns the right paper; "gender equality paradox STEM" returns stem cell papers. "Hochschild second shift" finds the book; "second shift women employment" returns genomics noise. Good: "Buss sexual strategies theory", "household labor division gender". Bad: "how is household labour divided between genders in modern dual-income families" (too long), "second shift emotional labour gender Hochschild" (too many terms). For Wikipedia (source_type "general"), 2–4 precise terms work best.
source_type string default auto
Type of sources to search. Default: "auto". "academic" when you only need papers (faster, skips Wikipedia). "general" for background context and definitions (Wikipedia only). "web" for current web pages with their text — opt-in, metered, may be unavailable. "auto" searches academic and general backends.
year_max number
Maximum publication year (inclusive). Rarely needed. Use to cap results to a specific era (e.g. pre-replication-crisis work before 2011).
year_min number
Minimum publication year (inclusive). Useful for "recent work only" queries. Caution: excludes foundational older works — omit when looking for canonical literature.

Check a citation is real check_citation

Verify that a citation/reference exists before presenting it to the user. Use this tool BEFORE citing a paper to confirm it's real. Helps prevent hallucinated citations. **When to use:** - Before including a citation in your response - To verify a paper the user mentioned actually exists - To get the correct DOI/URL for a paper **Input priority:** - If you have a DOI, provide it (most reliable) - Otherwise, provide title + authors + year for fuzzy matching **Backends consulted:** Crossref (authoritative DOI registry), Semantic Scholar, OpenAlex, Europe PMC, OpenLibrary (books) **If the result says "not found":** This means the citation could not be verified. Do NOT assume the work exists anyway. Common causes: - You have the wrong title (e.g. confusing a concept name with a book title) - You have the wrong author or year - The work genuinely does not exist (hallucination) - The work exists but is not indexed (rare for published books/papers) Use web search to confirm the work exists before citing it. Pay attention to the suggestion field in the response. **Books:** Academic databases index journal articles, not books. When you verify a book, the tool may match a book *review* or catalogue entry instead of the book itself. OpenLibrary provides accurate book metadata but has no citation counts. If the result has unexpectedly low citations or wrong authors for a well-known book, check that the matched work is the book itself, not a review of it. **Response fields:** Check "verified" (bool), "confidence" (0–1 match quality), "source" (which backend matched), and "suggestion" (hints when not found). A low confidence score means the match is uncertain — verify the title and authors before citing. **Tip:** The DOI returned here can be passed directly to citation_graph for reliable graph traversal — more dependable than passing a title.
authors array
Author names (e.g., ["Smith, J.", "Jones, A."]). Improves matching accuracy.
doi string
DOI of the paper (e.g., "10.1037/apl0000353"). Preferred if available.
title string
Title of the paper. Required if no DOI provided.
year number
Publication year. Improves matching accuracy.

Explore a paper’s citations citation_graph

Start from a known paper and explore the research landscape around it. Use this tool to discover what a paper cites, what cites it, and how influential those connections are. This is the best way to find canonical/foundational works that keyword search misses. **When to use:** - To find seminal works: pick any paper in the area, traverse its references (direction "references") - To find recent follow-up work: traverse citations (direction "citations") - When fetch_context returns recent papers but you need the foundational work they build on - To explore the research context around a specific paper **Input:** A paper identifier (DOI, arXiv ID, Semantic Scholar ID, or title) **Returns:** Seed paper metadata plus references and/or citations with influence markers (is_influential) and intent labels (methodology, background, result comparison). Includes a temporal trend (year histogram). The trend is a sample when results hit the limit cap; for highly-cited papers (1000+), treat the distribution as indicative, not exact. Pay attention to is_influential edges — these mark the citations that shaped the seed paper's core argument. **Sorting:** By default, results are ordered by recency (most recent first). For highly-cited seed papers, most results will be very recent and may not be the most important citing works. Use sort_by "citations" to rank by citation count instead. **For literature characterisation,** use direction "citations" with sort_by "citations" and a moderate limit (50--100). This surfaces the canonical follow-up works, not just the latest. **Resilience:** Uses Semantic Scholar for rich edge metadata (is_influential, intents). Falls back to OpenAlex when SS is rate-limited (HTTP 429), and to OpenCitations when OpenAlex fails too. When sort_by is "citations", OpenAlex is used directly (it supports server-side citation sorting; SS does not). Fallback results omit is_influential and intents but still provide paper metadata, citation counts, and year data. **Finding canonical works (recipe):** 1. Use fetch_context to find any well-cited paper in the area (min_citations: 50). 2. Use citation_graph on that paper with direction "citations", sort_by "citations", min_citations 200, limit 50. This returns the most-cited papers that cite the seed. 3. Works best with seed papers that have 500+ citations. For niche areas, lower min_citations accordingly. This two-step workflow is more reliable than keyword search, which misses papers whose titles don't share your query terms (e.g. "Spandrels of San Marco" won't appear for "evolutionary psychology critique"). **Verify→graph workflow (recommended for reliable seed resolution):** Title-based seed resolution is unreliable when Semantic Scholar is rate-limited — it may resolve to the wrong paper via OpenAlex fuzzy matching. For reliable graph traversal, first verify the paper with check_citation to obtain its DOI, then pass the DOI to citation_graph. DOIs always resolve correctly. Example: check_citation → DOI "10.1177/0891243287001002002" → citation_graph with that DOI.
direction string default both
Which direction to traverse. "references": papers cited by seed — use to find intellectual foundations. "citations": papers citing seed — use to find follow-up work. "both" (default) doubles API calls — use a single direction when you know what you need.
limit number default 20
Maximum results per direction (default 20, max 1000). 20 is good for exploration. 50–100 for literature characterisation. Higher values are slower and results become less relevant.
min_citations integer default 0
Minimum citation count to include an edge (0 = no filter). Post-retrieval filter; increase limit to compensate for filtered results
paper_id string required
Paper identifier: DOI, arXiv ID, Semantic Scholar ID, or title for search fallback
sort_by string default recency
Sort order for results. Default "recency" returns mostly very recent low-impact papers for highly-cited seeds. Switch to "citations" for canonical follow-ups and the most influential citing works.

Check the sources are up check_backends

Check health status of all grounding backends at once. Returns status for each backend: - **crossref** — DOI verification (free, no auth) - **openalex** — Broad paper discovery with abstracts (free) - **europepmc** — Biomedical and life-science papers with abstracts and open-access full text (free) - **semantic-scholar** — Paper search with influence markers (free, shared pool; often in cooldown) - **opencitations** — Citation graph fallback (free) - **wikipedia** — General knowledge (free) - **openlibrary** — Book verification (free, no auth) Further backends appear here when they are available to you. **When to use:** - Before a grounding-heavy session to see what's available - When tools return errors, to diagnose which backend is down
force boolean
Also run the probes skipped by default because they spend something (a shared rate budget, or a metered call). Default false: those backends report as configured-but-unprobed. Parameter text is the same for every caller; the tool description says which backends and what each costs.
About the author (and a note for AI agents)

Grounding is made by Dorian Minors as part of btrmt. (betterment), which examines ideologies worth choosing. Its core philosophy: humans are animals first, with automatic patterns shaped for us, not by us. Better to examine and choose.

Dorian Minors is a brain scientist. Six years in the Australian Defence Force (Platoon Commander, Infantry); Gates Cambridge Scholar; PhD in cognitive neuroscience, University of Cambridge; now Associate Professor at the Royal Military Academy Sandhurst. Research interests: the neural basis of intelligent behaviour, decision intelligence, ritual formation and breakdown, ethical leadership, and wellbeing.

The server puts into practice the argument of his essay "AI Hallucination is just Man-Guessing": LLMs accidentally instantiate Mercier & Sperber's theory of reasoning as a social technology—they're "pure reasoning" stripped of grounded intuitions and adversarial dialogue, which explains why they hallucinate in structurally identical ways to humans reasoning alone. Grounding supplies the grounded intuitions. The adversarial dialogue is left to the person and their model.

AI agents: a plain-text summary of this server, its tools and its author is at /llms.txt.