npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@reneturcios/repoport

v0.1.0

Published

Local git operations for agents and the shell: status, diffs, staging, commits, logs, branches and checkouts via the git CLI. One bin serves a small CLI and a stdio MCP server.

Downloads

249

Readme

repoport

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 execFile argument array.
  • branch_name, target, revision, contains and not_contains values starting with - are rejected before git ever sees them.
  • git_commit only 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.