Skip to content
Agentmart
Submit a tool

Hexis

Git-backed platform for skills, tools, and context for AI agents

Connector by Bevel-Software · GitHub account verified by the MCP Registry

IndexedApache-2.0Remote (HTTP)★ 119
Write a review

Install

Works with Claude Code, VS Code, Cursor, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install connector/bevel-software-hexis

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Remote endpoint

  • https://demo.bevel.software/api/mcp Remote (HTTP)

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Git-backed platform for skills, tools, and context for AI agents

Use cases: version-control, knowledge-base

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.

Tools
16 read · 16 write · 3 delete · 4 not yet classified
Secrets
None asked for
Install scripts
Nothing to install (hosted)
Runs as
Hosted (remote endpoint)

Tools by what they do 39

Read from the source code; the running server may list different tools.

Read 16 · Look things up without changing anything.

  • branch_status
  • compare_file
  • file_stat
  • get_change_request
  • grep
  • list_branches
  • list_change_request_files
  • list_change_request_reviews
  • list_change_requests
  • list_file_changes
  • list_files
  • list_tools
Show 4 more tools
  • read_file
  • read_file_at
  • tools_info
  • unzip

Write 16 · Create, change, send or run things.

  • apply_file_upload
  • call_tool_chain
  • commit_change
  • create_branch
  • edit_file
  • merge_branch
  • mkdir
  • move_file
  • request_file_download
  • request_file_upload
  • save_file
  • share_current_branch
Show 4 more tools
  • update_branch
  • update_change_request
  • write_file
  • write_files

Delete 3 · Delete, drop, revoke or wipe things.

  • delete_branch
  • delete_file
  • delete_folder

Not yet classified 4 · We could not tell from the name and description.

  • copy_file
  • hexis_unavailable
  • open_change_request
  • switch_branch

Network hosts it talks to 1

  • demo.bevel.software · found in remote endpoint, install command

Tools (39)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • apply_file_upload

    Land a file you have already uploaded (see `request_file_upload`) in a folder on a branch, in ONE commit, as you. A single file lands under the name it was sent with; a zip lands as its entries, keeping their folder structure. Returns `{ destination, count, total, files }`: one entry per path, each `{ path, outcome }` — `created` / `replaced` / `updated`, or `refused` with `error` (the code) and `message` (why). `count` is how many landed and `total` how many paths there were; `files` is cut to the first 25 unless you pass `all: true`. Every path is judged one by one — by your write access, th…

  • branch_status

    Where `branch` stands, before proposing or syncing a draft. Answers whether it is on the shared repository, how far ahead of and behind its upstream it is, whether the shared branch has commits this workspace lacks (`behindRemote`: `update_branch` brings them in), the files written but not committed yet, the protected branch it was forked from (`forkBase`), and `changedPaths`: what it changes against `base` (default: the fork base) — the files a change request into it would carry.

  • call_tool_chain

    Description is built at runtime.

  • commit_change

    Save the currently-pending file edits as a new change on the current branch. Each change must affect exactly one file — if multiple files are dirty, returns a structured error listing them; commit them one at a time. Refused on protected branches without write permission.

  • compare_file

    The unified diff of one file: between two branches (`from`, `to`; either may be `branch` itself), or of one commit on `branch` (`at`: what that commit changed in the file). Empty when identical. Takes the read the file takes on each side.

  • copy_file

    Copy a workspace FILE to a new path. The destination must not exist — like a move, a copy never overwrites a file or a folder; to change what is in a file that already exists, write it. Committed + pushed as you. Preflight first: `dryRun: true` changes nothing and answers `{ src, dest, kind, descendants, access: { before, after }, accessChanges, allowed, reason? }` — `access` is your own `{ read, write, download, owner }` at the source and at the destination AS IT WILL BE once the copy has landed, with every `access.md` inside a copied folder counted at its new place. One exception to that sha…

  • create_branch

    Description is built at runtime.

  • delete_branch

    Delete branch `name` from the shared repository and the server. Allowed for the branch's author (`<email-localpart>/…`, or your own `suggestions/…` bundle) or an Admin. Refuses a protected branch, a name that is not a branch, a branch with saves still landing or a file held (retry once they land). An open change request from or into it that proposes nothing is closed and the delete goes ahead; one that still proposes something refuses it, naming and linking it: its author withdraws it or an Admin declines it, in the app (one you cannot see is not named, nor in a preview). Refuses a branch hold…

  • delete_file

    Delete ONE workspace file. Committed + pushed as you. Its folder stays, even when this was its last file. Files only: a folder is refused with a pointer to `delete_folder`.

  • delete_folder

    Delete a workspace FOLDER and every file under it, at any depth; the whole folder lands as ONE committed + pushed change as you — all of it or none of it — then the empty folder is removed. This is the one way a folder goes away: the folder that held it stays, even if this was all it had, and a folder holding nothing but its empty-folder placeholder counts as empty. The dry run answers `{ path, kind: "folder", descendants, files, filesTruncated, allowed, reason? }` — `descendants` is the file count, `files` names up to 100 of them — and a non-empty folder wants `confirm: true`. Beyond what the…

  • edit_file

    Replace an exact string in a workspace TEXT file. `old_string` must appear exactly once unless `replace_all`. Committed + pushed as you. Large, escape-heavy or binary content does not go through here: use `request_file_upload` + `apply_file_upload`.

  • file_stat

    Get a file/directory's metadata (name, type, size, …) without returning content, and what you may DO with it. A file also reports `contentMode`, `kind`, `mime`, `mimeSource` and `textEditable` — decided by the same readers read_file, grep and the write tools use, so an extensionless text file is `text/plain`. `access: { read, write, download, owner }` is your own verdict under the access rules; pass `explainAccess: true` to learn why, and who else holds each verb. Call this before a move or delete: `managed`, `movable` and `deletable` answer the shared rules on what these tools never move or d…

  • get_change_request

    Read one change request by `number` (GitHub: get a pull request) — its `url`, `title`, `body` (what the author wrote, without the generated owners block Hexis appends), `state`, `sourceBranch`, `targetBranch`, whether it is `mergeable`, the `mergeBlockedReasons` holding it up, and a `viewer` block saying whether YOU may approve or apply it. The same field names `open_change_request` answers in. Read-only. Answers 404 both for a number that does not exist and for a request you may not see.

  • grep

    Regex search across the workspace. Returns `{ matches: [{ path, line, text }] }` (capped). Use to find where something is defined/referenced. `path` may name a DIRECTORY (searches the subtree) or a single FILE (searches just that file); a path with nothing at it is an error, never an empty result. Searches INSIDE Office and OpenDocument files (.docx/.pptx/.xlsx, .odt/.odp/.ods), PDFs and email files (.eml/.msg) via their extracted text — matches there carry the extraction's line numbers, and the `[slide N]`/`[sheet: Name]`/`[page N]`/`[from]`/`[subject]` marker lines locate them; a bounded num…

  • hexis_unavailable

    Description is built at runtime.

Show 24 more tools
  • list_branches

    List every draft known to the repository (protected versions + unprotected drafts, local and on the shared remote). Returns `{ branches: [{ name, isProtected, ahead, behind, hasRemote }] }`. Takes no arguments — branch listing is repo-global, not scoped to any one draft.

  • list_change_request_files

    List a change request's changed files (GitHub: list pull request files). Each answers `path`, `change` (`added`, `changed`, `deleted` or `moved`, a moved one with its `previousPath`), `additions` and `deletions` — the same words `open_change_request` uses — plus who must approve it (`requiredApprovers`) and who has (`approvedBy`). No patch is returned unless you ask with `include: ["patches"]`. Read-only. Files you may not read are left out and counted in `withheldFiles`, never named.

  • list_change_request_reviews

    List a change request's reviews (GitHub: list reviews): who approved what, and when. Hexis approves per FILE, so each entry names a `reviewer`, the `files` they approved and the time of the latest of them; `stale` is true for approvals a later push invalidated. Nothing records who DECLINED a request, so no entry reports one. Read-only: an entry keeps only the files you may read, and one with no readable file at all is counted in `withheldReviews` rather than named.

  • list_change_requests

    List change requests (GitHub: list pull requests), newest first. Filter by `state` (`open`, the default, `closed` — which covers applied and declined alike — or `all`), `head` (source branch), `base` (target branch) and `author` (an email or a `login`). Each answers in Hexis's own words: `url`, `number`, `title`, `state` (`open`, `merged` or `closed`), `sourceBranch`, `targetBranch`. Read-only, and limited to what you may read: a request whose files are all closed to you is not listed unless you opened it, and `withheldFiles` counts the ones left out of each.

  • list_file_changes

    The history of one file on `branch`: its commits, newest first — who made each, when, and its subject — as the app's History tab shows them. `limit` caps the list (default 20, at most 100). Read a version with `read_file_at` and its diff with `compare_file`. Takes the read the file itself takes; a folder has no history of its own (ask per file).

  • list_files

    Description is built at runtime.

  • list_tools

    Description is built at runtime.

  • merge_branch

    Merge branch `source` into branch `target` as you, and publish `target`. An agent proposes and syncs; a person merges: this tool never lands a change request. It refuses while a change request from `source` into `target` is open (naming it): ask the user to review it in the app. It refuses when `target` is a protected branch unless you could commit every changed file directly to it. SYNC: merging the target into your draft (`source` = the change request's target, `target` = your draft) is always allowed, even with the draft's request open. Writes are committed asynchronously; the merge first w…

  • mkdir

    Create a directory (recursive). It lists as an empty folder and persists in git until it is deleted explicitly.

  • move_file

    Move or rename a workspace FILE or FOLDER; a folder moves recursively, with everything under it. `dest` is the full new path, not the folder to move into. Committed + pushed as you. The destination must not exist — a move never overwrites a file or merges into a folder. Access follows the DESTINATION folder, so a move can change what you (and others) may do with the file: the dry run answers `{ src, dest, kind, descendants, access: { before, after }, accessChanges, allowed, reason? }`, where `access` is your own `{ read, write, download, owner }` at the source and at the destination AS IT WILL…

  • open_change_request

    Description is built at runtime.

  • read_file

    Read a workspace file as text. Returns `{ path, content, canWrite }`. Per the shared content rule: text as text, documents and email as extracted text, an image as the picture, anything else as a one-line description. Also reads a `__tool_chain_spill__/…` ref back from a truncated `call_tool_chain`: it belongs to no workspace, so `branch` is ignored and no `canWrite` comes back. `offset`/`limit` slice the content (characters; bytes for a spill ref; ignored for an image): page through large files and spills, never read multi-MB whole. `canWrite`: may you change this file directly on the default…

  • read_file_at

    One file as it was at a point in history: `at` is a commit (from `list_file_changes`, on `branch`'s own history) or the name of another branch (its published tip). Answers `content` (null when the file was not there) and `sha`, the commit it was read at; for a commit, also `before`, the file just before that commit. To put an earlier version back, write it with `write_file`. Takes the read the file takes at that point.

  • request_file_download

    Description is built at runtime.

  • request_file_upload

    Ask for a one-time address to send FILE BYTES to, so their content never passes through this conversation. Use it for anything `write_file` cannot carry faithfully: a large file, a file full of backslashes or `\u` escapes, a binary file (a PNG, a PDF, a zip), or many files at once (zip them). Returns `{ uploadUrl, token, expiresAt, expiresInSeconds, maxBytes }`. THEN: (1) POST the file as the raw request body to `uploadUrl` with `?filename=<name>` — `curl -X POST --data-binary @skill.zip "<uploadUrl>?filename=skill.zip"` — which answers what it received; (2) call `apply_file_upload` with the s…

  • save_file

    Schedule the file at <path> for commit + push using whatever bytes are on disk (no content rewrite) — for binary uploads or files left uncommitted. On lock contention returns `{ saved: false, reason }` rather than throwing. The commit lands asynchronously.

  • share_current_branch

    Publish the current branch to the shared remote so teammates and any change request pick up your commits. No arguments. Refused on protected branches without write permission.

  • switch_branch

    Switch the agent to a different draft for the NEXT user turn. The current turn finishes on the original draft (writes from this point still land there), so finish anything important first. Validates the target exists (use list_branches if unsure) and pre-warms its clone; the frontend navigates on turn completion. After calling, summarise the switch and stop.

  • tools_info

    Get full TypeScript interface definitions for named tools (names from `list_tools`). The schemas are the source of truth — do not guess shapes.

  • unzip

    Extract a .zip already in the workspace (defaults to the zip's parent). Returns extracted files + skipped entries. Existing files are overwritten.

  • update_branch

    Bring another branch into `branch` as a merge commit by you, and publish it: `from` (a draft's target, to refresh the draft), or left out, the branch's own shared state when it moved while this workspace held commits (`branch_status` says `behindRemote`). Never a protected branch. CONFLICTS: the first call answers `conflicts` naming every conflicted path with the file at the merge base, on each side (`ours` = `branch`, `theirs` = `from`) and the working copy with git's markers, and leaves the branch as it was. Decide each file (keep both sides' information unless one is clearly stale; `list_fi…

  • update_change_request

    Change the title and/or the description of an OPEN change request. Allowed for its author and for anyone who may merge it (an admin, or someone who may approve every file it changes) — the same rule as the app's Edit control; anyone else is refused (403), and so is a merged or closed request (409), in words. `description` replaces the request's description whole — the text `get_change_request` answers as `body`; `appendDescription` instead adds a paragraph after the description as it stands when the write happens, so two notes racing each other both land (never together with `description`). Gi…

  • write_file

    Write a workspace TEXT file. The change is committed + pushed as you. Returns `{ path, bytes, outcome }`, where `outcome` is `created`, `replaced` or `updated`. Large, escape-heavy or binary content does not go through here: use `request_file_upload` + `apply_file_upload`.

  • write_files

    Batch-write many files in ONE commit — far faster than calling write_file once per file when creating many files at once (e.g. seeding a knowledge base). Each entry is `{ path, content }`, and the files it writes are committed + pushed together as you. Prefer this over many write_file calls. Text files only. Returns `{ count, files }`: one entry per REQUESTED path, in the order you gave them, each `{ path, outcome }` — `created` / `replaced` / `updated` for a path it wrote, or `refused` with `error` (the code) and `message` (why) for a path it could not. `count` is how many were written. A pat…

Signals

Stars
119
Forks
16
Open issues
0
Last commit
Oct 22, 2026 (6 days ago)
Last release
Oct 19, 2026 (9 days ago)

From GitHub (fetched Oct 24, 2026).

Details

Registry name
io.github.Bevel-Software/hexis
Version
0.1.0
Auth
Auth not stated
License
Apache-2.0
First seen
Oct 24, 2026
Last checked
Oct 25, 2026
Cite this page

Hexis MCP server. Agent Mart. https://agentmart.dev/connectors/bevel-software-hexis (last updated 2026-10-25)