The workflow is enforced by the tool shapes rather than by advice: find_files_by_chunk_content returns a file tree with no content in it, so the agent has to choose a file before it pays for matches, and chunk_details is the only route to a full chunk. Chunking is structural — functions, classes, markdown sections and import blocks — which is what makes a match on a symbol land on the definition rather than on a line number. The eighth tool, get_a_joke, is marked in its own description as being there for testing.
A code exploration server that splits a project's files into chunks — functions, classes, markdown sections, import blocks — and searches over them, with two Git tools for branch and diff context.
- configure_project registers a root path under a name and does the chunking; every other tool addresses that project by project_name
- A two-step search that keeps responses small: find_files_by_chunk_content returns only which files match, find_matching_chunks_in_file shows the matches inside one file, and chunk_details returns a chunk's full content by chunk_id
- list_all_files_in_project returns a file tree with limit_depth_from_root and a path_filter, for an overview before the search narrows
- Git context without leaving the tool set: list_most_recently_checked_out_branches returns the last n branches, and diff_with_ref summarises the diff between HEAD and a base ref
A local checkout the server can read, registered with configure_project before anything else, since the other tools take its project_name. diff_with_ref and list_most_recently_checked_out_branches expect that checkout to be a Git repository. UV_PYTHON in the configuration means it runs under uv, so a Python interpreter uv can use. MIT licensed.
One command — uvx mcpunk
