The MIND MCP server has five tools, and none of them changes anything. Each one carries these annotations, so a client that asks before running a tool that writes can run them without asking:
{
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
}Each tool returns structuredContent that matches its output schema, and the same JSON as the first text block for clients that read only text. A result is never longer than 64,000 characters (see Limits and Errors).
Search MIND docs
Tool search. Searches the documentation, the standard library, the error reference, the specification and the examples, and returns ranked passages, each with a citation URL.
| Input | Type | Values |
|---|---|---|
query | string, required | 1 to 512 characters: a question, a concept, an identifier (string_len), a CLI flag (--emit-ir) or an error code (E2103) |
source | string | all, docs, std, errors, examples, spec or changelog. Default all |
limit | integer | 1 to 20 passages. Default 8 |
max_tokens | integer | 256 to 8,000: an approximate budget for all passages together. Default 2500 |
Output, from a real call (the passage text is shortened here):
{
"results": [
{
"id": "docs/determinism#1-integer-semantics-",
"title": "The Determinism Contract",
"url": "https://mindlang.dev/docs/determinism#1-integer-semantics-",
"text": "Fully deterministic and byte-identical across substrates. …",
"section": "1. Integer semantics — Shipped",
"source": "docs",
"score": 0.97
}
],
"mode": "lexical",
"truncated": true,
"index": "7f889553ec65"
}results: the passages, best first.sectionis present when the passage sits under a heading;sourceisdocs,guide,std,errors,examples,specorchangelog;scoreonly orders the results.mode: how the passages were ranked.hybridwhen matching by meaning was combined with matching by keyword;lexicalwhen keywords alone ranked them.truncated:truewhen passages were left out to stay withinmax_tokens.index: the build id of the index, the same onemind://aboutshows.note: present only when nothing matched, with what to try next.
Search matches by meaning and by keyword (mode: "hybrid"). When the embedding model is unavailable, or one client has sent more than 30 searches in the last minute, it matches by keyword alone instead of failing (mode: "lexical"). Read mode rather than assuming either one. The semantic flag in mind://about and server/discover says only that the index holds the data for ranking by meaning, not how a search was ranked. A release number in the query (0.10.2) brings that release's notes to the top. Cite the url of each passage you use.
Example prompts:
- "How do I declare a tensor with a symbolic batch dimension in MIND? Use the MIND docs."
- "What does integer division by zero return in MIND?"
- "Search the MIND specification for how broadcasting is defined."
Read a MIND doc
Tool fetch. Returns the full text of one document by id, docs path or mindlang.dev URL. Long documents come in pages.
| Input | Type | Values |
|---|---|---|
id | string, required | 1 to 300 characters: an id from search or list_docs (docs/determinism), a docs path (/docs/determinism) or a URL (https://mindlang.dev/docs/determinism) |
offset | integer | The character to start at, 0 or more. Default 0 |
max_chars | integer | 1,000 to 60,000 characters per call. Default 40000 |
Output, from a real call with max_chars: 1000 (the text is shortened here):
{
"id": "docs/determinism",
"title": "The Determinism Contract",
"text": "# The Determinism Contract\n\nThe MIND determinism contract: …",
"url": "https://mindlang.dev/docs/determinism",
"metadata": {
"source": "docs",
"version": "mindc 0.10.2",
"last_modified": "2026-10-08",
"offset": 0,
"next_offset": 1000,
"total_chars": 16309
}
}To read a long document, call fetch again with offset set to metadata.next_offset until next_offset is null. If a page would go over the 64,000-character result cap once encoded as JSON, fetch returns a shorter page and next_offset points at the rest. An id with a section anchor (docs/determinism#1-integer-semantics-) returns the whole document, and url keeps the anchor.
An id that names no document, a URL that is not a mindlang.dev docs page, or an offset past the end returns an error result that says what to use instead.
Example prompts:
- "Read the whole MIND determinism contract and list what it marks as non-deterministic."
- "Fetch https://mindlang.dev/docs/shapes and summarize the broadcasting rules."
List MIND docs
Tool list_docs. Lists the documents with their ids, URLs, one-line descriptions and section headings, to choose what to fetch.
| Input | Type | Values |
|---|---|---|
source | string | docs, std, examples, spec, changelog or all. Default docs |
Output, from a real call with no arguments (two of the 44 items are shown):
{
"items": [
{
"id": "guide/llms-full",
"title": "MIND reference for AI agents",
"url": "https://mindlang.dev/llms-full.txt",
"description": "The language, compiler and toolchain in one page."
},
{
"id": "docs/index",
"title": "MIND Language Documentation",
"url": "https://mindlang.dev/docs",
"description": "MIND documentation: the language, the deterministic compiler, canonical mic@3 IR, evidence chains, autodiff, the standard library and toolchain guides.",
"sections": ["Start here", "Core Concepts", "Full-Stack AI (Roadmap)", "Language Specification", "Getting Help"]
},
…
],
"total": 44
}guide/llms-full, the whole language on one page, is always listed first.sectionsholds the document's second-level headings.- With
source: "all", descriptions are cut to 100 characters andsectionsis left out, to keep the list short. The per-code error documents are not listed; useexplain_errorfor them.
Example prompts:
- "List the MIND specification chapters, then read the one about autodiff."
- "Which example programs ship with the current MIND release?"
Look up a MIND std symbol
Tool lookup_symbol. Finds standard-library functions, types and modules by exact or partial name, and returns their signatures and doc comments from the current release.
| Input | Type | Values |
|---|---|---|
name | string, required | 1 to 128 characters: a name or part of one (string_len, sha256, vec) |
module | string | Up to 64 characters: only look in this std module (string) |
kind | string | any, function, type or module. Default any |
limit | integer | 1 to 20 matches. Default 5 |
Matching ignores case and tries, in order: the exact name, names that start with it, names that contain it, and names within two edits of it. It returns the first of these that finds anything, and match says which one (exact, prefix, substring, fuzzy, or none). Functions come before types and modules, shorter names first. std.string.string_len, string::string_len and string_len() all mean string_len in module string; std.string alone means the module.
Output, from a real call with name: "string::string_len":
{
"matches": [
{
"kind": "function",
"name": "string_len",
"module": "string",
"signature": "pub fn string_len(s: String) -> i64",
"doc": "string_len — current byte length (NOT codepoint count).",
"url": "https://github.com/star-ga/mind/blob/v0.10.2/std/string.mind#L31"
}
],
"match": "exact",
"version": "mindc 0.10.2"
}After the JSON, the result links up to three matched modules as resource_link blocks (mind://std/string), so a client can attach the whole module. Signatures come from the mindc release named in version. When nothing matches, matches is empty, match is none, and a short hint follows.
Example prompts:
- "What is the exact signature of string_len in MIND?"
- "Which MIND std functions start with vec_?"
- "Look up sha256 in the MIND standard library and show how to call it."
Explain a MIND compiler error
Tool explain_error. Explains an error code: the pipeline phase that raises it, what it means, and the documentation that covers it.
| Input | Type | Values |
|---|---|---|
code | string, required | E and four digits, the first 1 to 6 (pattern ^[Ee][1-6][0-9]{3}$), such as E2103 |
Output, from a real call with code: "E2103":
{
"code": "E2103",
"phase": "Type-check (E2xxx): type mismatches, inference failures, shape validation",
"title": "Matmul inner-dimension mismatches",
"summary": "mindc 0.10.2 docs: Matmul inner-dimension mismatches. Shape validation for Core v1 operators is surfaced during type checking, inside the E2xxx space.",
"documented": true,
"sources": [
{ "title": "Error Handling › Error Codes", "url": "https://mindlang.dev/docs/errors#error-codes" },
{ "title": "MIND Core Error Model (mindc 0.10.2)", "url": "https://github.com/star-ga/mind/blob/v0.10.2/docs/errors.md#error-codes" }
]
}documentedisfalsewhen the references describe only the code's phase, not the code itself.titleis then left out andsummarydescribes the phase.summaryquotes the current compiler's docs first, then the Core v1 specification where it gives the code a different meaning.- A documented code also gets a
resource_linktomind://errors/<CODE>, which holds every public reference for it.
The first digit of a code names its phase:
| Codes | Phase |
|---|---|
E1xxx | Parse: syntax errors |
E2xxx | Type-check: type mismatches, inference failures, shape validation |
E3xxx | IR verification: failures of the public IR invariants |
E4xxx | Autodiff: non-differentiable or ambiguous gradient requests |
E5xxx | MLIR lowering: failures translating canonical IR into MLIR |
E6xxx | Runtime and artifact production (Core v1 specification) |
E1xxx to E5xxx follow mindc's own numbering, documented under Errors. The Core v1 specification numbers E3xxx to E5xxx differently; explain_error names a code the way mindc reports it and adds the specification's meaning after it.
Example prompts:
- "My MIND build fails with E2103. What does it mean and how do I fix it?"
- "Explain MIND compiler error E1001 and show the docs it comes from."
Errors returned as results
Problems the model can fix come back as a normal tool result with isError: true, so the model reads the message and tries again:
- Arguments that do not match the input schema: the text starts with
Input validation error:and names the argument, for example#/limit: 99 is greater than 20. - An unknown
fetchid, anoffsetpast the end of a document, or a result over 64,000 characters: the text says what to ask for instead.
A tool name the server does not have is a JSON-RPC error (-32602), not a result. Limits and Errors lists every code.
Earlier tool names
1.x tool names
The four tools of the 1.x server still answer, so setups that list them keep working: mind_overview, mind_determinism_facts and mind_ecosystem take no arguments, and mind_lookup takes query (1 to 512 characters). They run search underneath and return plain text: each passage, then Source: and its URL. They have no output schema. New setups should use search and fetch.
Related pages
- MCP Server: set the server up in your client
- Resources and Prompts: documents to attach and ready-made prompts
- Example Workflows: which tools a task calls, in order
- Limits and Errors: rate limits, sizes and error codes