About repoport
repoport lets agents operate on local Git repositories through MCP, and also provides a CLI. It covers status, diffs, staging, commits, logs, and branches, invoking Git without using a shell.
Key features
- 01Inspect repository status and diffs
- 02Stage files and commit changes
- 03Read commit logs and revisions
- 04Create, list, and switch branches
- 05Validate repository paths and revision arguments
Use cases
- 01Have an agent inspect working-tree changes
- 02Stage files and commit staged content
- 03Review commit history or a revision
- 04Create a branch or switch the work tree
MCP support
It provides a stdio MCP server exposing tools for local Git status, diffs, staging, commits, logs, revisions, and branches.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
Tools
Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.
Details
From the project READMErepoport
repoport gives an agent hands on a local git repository without giving it a shell. It covers the everyday loop — check status, read diffs, stage files, commit, read the log, inspect a revision, and move between branches — and it does so by calling the git CLI directly, with every argument passed as data rather than stitched into a shell string.
The repository path is checked before anything runs: it must exist and must be inside a git work tree. Revision-like values that begin with a dash are refused, so a branch name or revision cannot smuggle an extra git flag into a call.
Install
npx @reneturcios/repoport status .
Or run the container image:
docker run -i ghcr.io/cloudcorprecords/repoport
The container defaults to the MCP server (see below). Pass CLI
arguments to use it as a CLI instead. The image and the npm package
both expect a git binary and access to the repository you point at;
mount or run against a local checkout accordingly.
CLI
# Working tree status for a repository
repoport status ~/src/my-project
# Recent commits (default 10, pass a count to change it)
repoport log ~/src/my-project
repoport log ~/src/my-project 25
repoport --version
Exit codes: 0 on success, 1 when git or the repository check fails
(the error carries git's own message), 2 for usage errors.
MCP server
One bin serves both faces. The mcp subcommand starts a stdio MCP
server:
npx -y @reneturcios/repoport mcp
MCP client configuration:
{
"mcpServers": {
"repoport": {
"command": "npx",
"args": ["-y", "@reneturcios/repoport", "mcp"]
}
}
}
Tools
| Tool | Input | What it returns |
|---|---|---|
git_status | repo_path (required) | The long-form git status output for the repository. |
git_diff_unstaged | repo_path (required), context_lines (optional, default 3) | A unified diff of unstaged working-tree changes. |
git_diff_staged | repo_path (required), context_lines (optional, default 3) | A unified diff of changes staged for the next commit. |
git_diff | repo_path, target (both required), context_lines (optional) | A unified diff against the given target revision. |
git_add | repo_path, files (array of strings, both required) | Stages the named files; paths are passed after --. |
git_reset | repo_path (required) | Unstages everything (git reset), leaving working-tree edits in place. |
git_commit | repo_path, message (both required) | Commits whatever is currently staged with the given message. |
git_log | repo_path (required), max_count (optional, default 10), start_timestamp, end_timestamp (optional ISO strings) | Recent commits newest first; timestamp bounds are applied against each commit's author date. |
git_show | repo_path, revision (both required) | The git show output for that revision. |
git_create_branch | repo_path, branch_name (both required), base_branch (optional) | Creates a branch without switching to it. |
git_checkout | repo_path, branch_name (both required) | Switches the work tree to the named branch. |
git_branch | repo_path (required), branch_type (optional: local, remote or all, default local), contains, not_contains (optional) | Branch listing, optionally filtered to branches that contain or do not contain a commit. |
Every tool returns git's stdout as its text result. Failures — a missing path, a path that is not a repository, a git error, or a rejected dash-prefixed value — come back as tool errors carrying the underlying message.
Safety notes
- No shell is involved anywhere: arguments travel as an
execFileargument array. branch_name,target,revision,containsandnot_containsvalues starting with-are rejected before git ever sees them.git_commitonly commits what is already staged; it never stages on your behalf.
Development
npm install
npm run build # tsc -> dist/
npm test # node test runner over test/*.test.ts, no network
npm run dev # run the CLI from source via tsx
Tests build a throwaway repository in a temp directory (initialising
git and setting a local test identity there) and exercise the full
loop against it, so they need a git binary on PATH but no network
and no pre-existing checkout.
License
MIT — see LICENSE.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.