Skip to content

Requirements & Limits

jarvis is deliberately narrow: check your language and platform here before you install.

LanguageNavigationSearchCaveat
TypeScript / TSXYesYes
PythonYesYes
Java / KotlinYesYesAndroid/Gradle, Kotlin version, Maven on macOS
SwiftYesYesVersion floor + code-signed targets
GoNoYes
RubyNoYes
RustNoYes
CNoYes
C++NoYes
C#NoYes
PHPNoYes
ScalaNoYes
shellNoYes
SQLNoYes

Navigation tools (goToDefinition, findReferences, callHierarchy, typeHierarchy, documentSymbols) cover only the four families above. Every other git-tracked language is indexed --search-only: searchCode and semanticSearch work, navigation does not.

  • macOS and Linux only. Windows is not supported.
  • Python 3.12+, installed via uv (the quickstart pins --python 3.13 so uv tool install always resolves the current jarvis-mcp).
  • git — language detection and Zoekt indexing both read the git-tracked tree.
  • Node.js with npm (LTS) — required to install the TypeScript and Python indexers (scip-typescript, scip-python are npm packages). Without it, setup.sh skips both with a warning and those languages get search-only coverage.

setup.sh installs these external binaries:

PurposeBinarySource
SCIP → SQLite conversionscipprebuilt, pinned v0.9.0 (minimum — older versions silently drop occurrence ranges)
Lexical searchzoekt-git-index · zoekt-webservercross-compiled by jarvis’s CI — upstream publishes no binaries
TypeScript indexingscip-typescriptnpm install -g
Python indexingscip-pythonnpm install -g
Swift indexingscip-swiftprebuilt, macOS arm64 only
Java/Kotlin indexingscip-javadetect-only — Docker image, asks before pulling

Swift: version floor and code-signed targets

Section titled “Swift: version floor and code-signed targets”

Swift indexing requires scip >= v0.9.0 — older converters cannot read scip.proto’s typed_range oneof, the only range encoding scip-swift emits, and silently produce an index with no navigable positions. jarvis index refuses an older scip rather than publishing one.

Repos with code-signed app-extension targets additionally require scip-swift >= v0.1.2; earlier versions pass no code-signing overrides to xcodebuild, which then fails provisioning before compiling anything. setup.sh skips any dependency that is merely present, so an existing install is not upgraded automatically — run sh ./setup.sh --only scip-swift --force.

Android/Gradle: no SCIP support (auto-degrades to search-only)

Section titled “Android/Gradle: no SCIP support (auto-degrades to search-only)”

Kotlin: exact version match required (auto-degrades to search-only)

Section titled “Kotlin: exact version match required (auto-degrades to search-only)”

Java (Maven) on macOS: requires bash >= 4.4

Section titled “Java (Maven) on macOS: requires bash >= 4.4”

scip-java’s generated javac wrapper expands an unguarded array reference that errors on bash < 4.4; macOS ships only 3.2, so a Maven build dies at default-compile rather than degrading to search-only. setup.sh works around it by shimming a newer bash onto PATH for the indexer. If no bash >= 4.4 is available, indexing fails with the remedy (brew install bash) instead of silently falling back — unlike the two cases above, a persisted --search-only cannot be un-set, so this one stops short rather than choosing for you.

semanticSearch: requires the semantic extra

Section titled “semanticSearch: requires the semantic extra”

semanticSearch is not installed by default. It requires uv tool install "jarvis-mcp[semantic]" and a re-index of each repo (jarvis reindex <slug>). Without the extra the tool returns its unavailable-reason payload.

Language is detected by extension plurality across git-tracked files only — a polyglot monorepo is indexed as whichever language has the most files. Multi-language merge is out of scope. --language overrides the detected choice; once set, only re-running jarvis index with a new value changes it.