Skip to content

Tool Catalog

Kaimon exposes 49 MCP tools on its default surface, organized into the categories below (plus a handful of advanced/infra tools gated off by default — enable them per project in .kaimon/tools.json). Each default tool is available to any MCP client (Claude Code, Claude Desktop, etc.) connected to a running Kaimon server.

Most tools accept an optional session parameter (8-character session key) for routing when multiple Julia processes are connected.

Code Execution

ToolDescriptionKey Parameters
exEvaluate Julia code in a persistent REPL. The user sees code in real-time.e (the Julia code — required; the parameter is e, not code), q (quiet, default true), s (silent), max_output, ses (session)
manage_replRestart or shut down a Julia session. Restart preserves the session key.command ("restart" or "shutdown"), session

ex – Evaluate Julia code

The primary tool for interacting with Julia. By default, q=true suppresses return values to save tokens. Use q=false when you need the computed result.

ex(e="using LinearAlgebra; eigvals([1 2; 3 4])", q=false)
# => 2-element Vector{Float64}: -0.3722..., 5.3722...

ex(e="x = rand(100, 100); size(x)")
# (quiet mode -- return value suppressed, but code runs)

Introspection

ToolDescriptionKey Parameters
investigate_environmentShow pwd, active project, packages, dev packages, and Revise status.session
search_methodsFind all methods of a function, or methods accepting a given type.query (function or type name), session
type_infoGet type hierarchy, fields, parameters, mutability, and subtypes.type_expr, session
list_namesList exported (or all) names in a module.module_name, all (bool), session
workspace_symbolsSearch for symbols across all loaded modules by name.query, session
document_symbolsList functions, structs, macros, and constants in a file via AST parsing. No session required.file_path
macro_expandExpand a macro expression to see the generated code.expression, session

investigate_environment – Orient yourself

investigate_environment()
# => Project: MyApp v0.2.1
#    Path: /home/user/MyApp
#    pwd: /home/user/MyApp
#    Dev packages:
#      Kaimon v0.8.0 => ~/.julia/dev/Kaimon
#    Revise: active

search_methods – Discover available methods

search_methods(query="sort")
# => Methods for sort:
#    sort(v::AbstractVector; ...) @ Base sort.jl:1489
#    ...

search_methods(query="AbstractString")
# => Methods with argument type AbstractString:
#    ...(all methods that accept AbstractString)...

Code Analysis

ToolDescriptionKey Parameters
code_loweredShow lowered (desugared) IR for a function.function_expr, types (e.g. "(Float64,)"), session
code_typedShow type-inferred IR for debugging type stability.function_expr, types, session
format_codeFormat Julia source files using JuliaFormatter.jl.path (file or directory), overwrite, verbose, session
lint_packageRun Aqua.jl quality assurance tests on a package.package_name (defaults to current project), session
ToolDescriptionKey Parameters
goto_definitionFind where a symbol is defined. Uses Julia reflection (methods/functionloc/pathof) with a file-grep fallback.file_path, line, column, session
navigate_to_fileOpen a file at a specific line and column in VS Code.file_path, line, column

VS Code Integration

ToolDescriptionKey Parameters
execute_vscode_commandRun any allowed VS Code command via the Remote Control extension.command, args, wait_for_response, timeout
list_vscode_commandsList all commands configured in .vscode/settings.json as allowed.(none)

Debugging (Infiltrator.jl)

Kaimon integrates with Infiltrator.jl for interactive breakpoint debugging. When a session hits @infiltrate, execution pauses and you can inspect locals and eval expressions in the breakpoint scope.

ToolDescriptionKey Parameters
debug_ctrlCheck breakpoint status or resume execution.action ("status" or "continue"), session
debug_evalEvaluate an expression in the context of a paused breakpoint.expression, session
debug_exfiltrateEvaluate code containing @exfiltrate to capture local variables.code, session
debug_safehouseInspect or clear variables captured by @exfiltrate.action ("inspect"/"clear"), expression (optional), session

Package Management

ToolDescriptionKey Parameters
pkg_addAdd packages to the current environment. Modifies Project.toml.packages (array of names), session
pkg_rmRemove packages from the current environment.packages (array of names), session

Testing and Profiling

ToolDescriptionKey Parameters
run_testsRun project tests in a subprocess. Supports pattern filtering and coverage.pattern (ReTest regex), coverage, verbose, project_path, session
profile_codeProfile Julia code to identify performance bottlenecks. Uses @profile with flat output.code, session
stress_testSpawn concurrent simulated MCP agents to stress-test a session.code, num_agents, stagger, timeout, session

run_tests – Run filtered tests

run_tests(pattern="security")
# Runs only tests matching "security"
# => Test Summary: ...
#    2 passed, 0 failed

run_tests(coverage=true)
# Runs all tests with coverage collection

run_tests(project_path="/path/to/MyPackage.jl")
# Run tests for a project without a gate session

Provide project_path (absolute path to the project) or session to identify the project. If neither is given and only one session is connected, that session's project is used. The test runner handles both test/Project.toml environments and legacy [extras]/[targets] layouts automatically.

search_code (by meaning) requires Qdrant running locally and Ollama for embeddings (default model qwen3-embedding:0.6b); its lexical arm and grep_code work with no external services. The indexing/admin tools below feed search_code.

ToolDescriptionKey Parameters
search_codeFind code by MEANING – semantic (vector) search with a light lexical boost, fused and ranked. Describe a concept or behaviour; for an exact symbol or pattern use grep_code instead.query, mode ("hybrid"/"semantic"/"lexical"), format ("text"/"structured"), filters, collection, cross_project, limit, chunk_type ("all"/"definitions"/"windows"), embedding_model
grep_codeFind an EXACT pattern/regex over the live working tree – repo-scoped, .gitignore-aware, and returns each hit's enclosing function/struct. The "better grep than grep".pattern, path/file/glob (scope), query (optional NL file-ranking), ignore_case, word, fixed, no_ignore, context, limit
qdrant_index_projectIndex a project's source files into a Qdrant collection.project_path, collection, recreate, extra_dirs, extensions
qdrant_sync_indexIncrementally sync an index – reindex changed files, remove deleted ones.project_path, collection, verbose
qdrant_reindex_fileRe-index a single file (delete old chunks, index fresh).file_path, collection, project_path, verbose
qdrant_list_collectionsList all available Qdrant collections.(none)

search_code and grep_code are the two ways to find code, and both beat shell grep/find (repo-scoped, .gitignore-aware, enclosing-symbol enrichment): use search_code when you can only describe what the code does, and grep_code when you know the literal text or a regex. search_code auto-tunes how much its lexical arm counts from the shape of the query (a natural-language sentence leans almost fully semantic; a quoted phrase, boolean, or bare symbol leans lexical), so just type what you mean. format="structured" returns a JSON array of hits ({point_id, name, file, type, start_line, end_line, text, snippet, sources, score}) instead of the ranked text – for programmatic use; filters={field:[vals]} restricts to chunks carrying matching metadata. grep_code respects .gitignore by default; pass no_ignore=true to also grep logs and generated/hidden files. The raw vector-DB admin tools (qdrant_collection_info/_exists/browse/create/delete_collection, qdrant_upsert/delete_points, qdrant_ensure_fts_coverage) are gated off the default surface – enable them in .kaimon/tools.json if needed.

search_code – Find code by meaning

search_code(query="function that handles HTTP routing")
# => [1 0.89] handle_request(req::Request) @ src/server.jl:L42-68 (function)
#    [2 0.81] route(path::String, handler) @ src/router.jl:L15-30 (function)
#    ...

grep_code – Find an exact pattern

grep_code(pattern="_eval_with_capture")
# => src/gate_stream.jl:L224  _eval_with_capture  function _eval_with_capture(...)
#    src/gate_eval.jl:L88     handle_eval         out = _eval_with_capture(code)
#    ...

grep_code(pattern="TODO|FIXME", glob=["src/**/*.jl"])   # scope with a glob
grep_code(pattern="set_bind", query="apply a browser value change to a cell")  # NL-rank the matching files

Session Management

ToolDescriptionKey Parameters
start_sessionSpawn a managed Julia session for an allowed project. Call with no arguments to list available projects.project_path, name
check_evalCheck status of a previous ex() evaluation by its eval ID. Returns status, elapsed time, and result preview.eval_id
extension_infoList loaded extensions and their tools. With name, show detailed tool docs and parameter schemas.name (optional)

start_session – Spawn a project session

start_session()
# => Lists all allowed projects and their status

start_session(project_path="/path/to/MyProject")
# => "Session started. Session key: a3f8b2c1"

The project must be in the allowed-projects list (~/.config/kaimon/projects.json). See Sessions for details.

check_eval – Poll a long-running evaluation

Every ex() call returns an eval ID as a structured JSON field {"eval_id": "XXXXXXXX"} in its first progress notification. Use check_eval to poll for completion:

check_eval(eval_id="abc12345")
# => status: completed, elapsed: 12.3s, result: "42"

Information

ToolDescriptionKey Parameters
pingHealth check. Returns server status, Revise status, and connected sessions.(none)
usage_instructionsGet Julia REPL usage instructions and best practices for AI agents.(none)
usage_quizSelf-graded quiz on Kaimon usage patterns. Tests understanding of the shared REPL model.show_sols (bool)
tool_helpGet detailed help and examples for any specific tool.tool_name, extended (bool)