Skip to main content
Glama

agentsync

An MCP server that lets two (or more) AI agents collaborate on the same git repository without stepping on each other. Each agent declares what it's building before it builds, sees what its partner has claimed, and detects conflicts when work lands — all coordinated through the repo itself, with no lock server and no requirement that both agents be online at once.

How it works (one paragraph)

Coordination state is a single claims.json living on a dedicated agentsync branch (kept out of main, so it never pollutes your code history and isn't blocked by main's branch protection). Each agent's claim declares the work, the files it will touch, what it requires, its branch, and a status. Overlap is plain set intersection. Writes use a read-modify-write loop with git push as a compare-and-swap: if the push is rejected, the server re-fetches the latest claims and re-evaluates, so a colliding peer claim is observed before this agent's claim is committed. All git work happens in a private worktree under .git/, so your agent's actual code branch is never disturbed.

See DESIGN.md for the architecture rationale and AGENTS.md for the playbook your agent follows to drive the tools.

Related MCP server: coordinaut

Install

pip install -r requirements.txt      # just `mcp`

For anything that talks to GitHub — provisioning a repo (provision), inviting a collaborator (add_collaborator), or opening a PR (finish) — you also need the GitHub CLI, authenticated with repo scope:

gh auth login        # one-time; check with `gh auth status`

Configure

Both collaborators add the server to their MCP client, each with their own agent id and their own local clone. See mcp.config.example.json:

{
  "mcpServers": {
    "agentsync": {
      "command": "python3",
      "args": ["/abs/path/to/agentsync_server.py"],
      "env": {
        "AGENTSYNC_BOARD_REPO": "/abs/path/to/the/clone/holding/the/board",
        "AGENTSYNC_AGENT_ID": "jonny"
      }
    }
  }
}

env var

required

default

meaning

AGENTSYNC_BOARD_REPO

yes*

path to the clone that holds the board

AGENTSYNC_REPO

no

legacy alias for AGENTSYNC_BOARD_REPO

AGENTSYNC_AGENT_ID

yes

your unique agent id

AGENTSYNC_REMOTE

no

origin

git remote name

AGENTSYNC_BRANCH

no

agentsync

coordination branch name

AGENTSYNC_PARTNER_GITHUB

no

partner GitHub user(s) to invite (comma/space-separated)

AGENTSYNC_STALE_HOURS

no

24

age after which an in-progress claim is flagged stale

AGENTSYNC_GIT_TIMEOUT

no

25

seconds any single git/gh call may run before it fails fast

The agentsync branch is created automatically on the first survey() or claim() call against an explicitly addressed board — no manual setup.

Where the board lives (board addressing)

* The board is a shared, long-lived team artifact, not a property of whichever repo you happen to be sitting in. So its address is resolved independently of the session, in this order:

  1. AGENTSYNC_BOARD_REPO — the explicit board address. This never follows the Xylem session pointer (~/.xylem/active_project.json).

  2. AGENTSYNC_REPO — the legacy explicit pin; identical effect.

  3. The current repo (session pointer, else the cwd's git root) — but only if that repo actually holds the coordination branch. The check is a real ref lookup (local head → remote-tracking ref → ls-remote), so this fallback can only ever select a repo that genuinely is a board.

  4. Otherwise a ConfigError naming AGENTSYNC_BOARD_REPO — never a silent selection of a boardless repo.

survey() reports the board it actually read under board: {repo, source}, so "the team is quiet" and "I am looking at the wrong board" are distinguishable.

Why this order. Previously an unpinned server followed the session pointer blindly. The board therefore changed identity whenever the session changed project, and in any project that had never been provisioned it simply disappeared — reported downstream as "no coordination branch found" and treated as normal. cambium's distill() applies this exact same resolution, so the two halves of the suite can never disagree about where the board is.

Starting from nothing (no repo yet)

If the shared repo doesn't exist on GitHub yet, one person runs provision() once. Point AGENTSYNC_BOARD_REPO at the folder you want the project in (it can be empty or not yet created) and call:

provision(repo="you/our-project", partner_github="their-username")

This creates the GitHub repo (private by default), makes the first commit, seeds the agentsync coordination branch, and invites your partner as a push collaborator. It's idempotent — safe to re-run. Then send your partner the clone_url it returns; once they accept the invite and clone, both of you point the MCP server at your own clones and the normal protocol below takes over.

Tools

provision(repo="", partner_github="", private=True, description="") — one-time bootstrap when the shared repo doesn't exist yet. Creates the GitHub repo via gh, makes the first commit, seeds the agentsync branch, and invites the partner as a push collaborator. Idempotent. Returns the clone_url to hand your partner. (Needs the gh CLI authenticated with repo scope.)

add_collaborator(github_username, permission="push") — invite one or more people (comma/space-separated) to the existing shared repo so they can push (pull|triage|push|maintain|admin). Use this when the repo already exists and you just want to grant access — this is how you build a team of more than two. They must accept the GitHub invite, then clone. (Needs gh with admin on the repo.)

survey() — pull the latest state and report what every other agent has claimed: task, files, dependencies, branch, status, timestamp. Works for any number of collaborators. Each partner entry is annotated with age_hours and a stale flag (in-progress and older than AGENTSYNC_STALE_HOURS, default 24h), and a top-level stale_claims list — so you can spot a partner who crashed or walked away still holding files. Run it before planning and after finishing.

claim(task, touches, requires=None, branch="", force=False) — stake a unit of work. Refuses with status: "blocked" if your touches hits a partner's active files (you'd get in their way) or your requires hits their in-progress files (you'd build on unstable ground), returning exactly what overlaps and with whom. Overlap is path-aware: exact match, directory containment (src/api vs src/api/routes.py), and globs (src/**, *.py) all collide, and paths are normalized first (./auth.py == auth.py). The overlap is checked against freshly-fetched state immediately before the push. Pass force=True to claim anyway (e.g. same large file, disjoint regions). If your agent id already holds an in-progress claim written by a different server instance — another agent is live under the same id — claim() returns blocked with a shared_agent_id reason naming the task, branch and files that would be erased, because one id holds exactly one claim. Give each agent its own id; force=True overrides it for the legitimate case of a restarted server reclaiming its own slot, and then the result carries a warning listing the files that just lost their protection.

release(note="") — abandon your current claim without marking it done, freeing the files for a partner to take over. Use it when you drop a task or step away — otherwise a crashed/abandoned claim blocks those files until someone does manual git surgery. Pushes immediately.

check_conflicts(against_branch="") — after building, diff your branch against your partners' branches at two levels:

  • claim_overlap — declared-path intersection (intent, path-aware).

  • merge_conflict — a real git merge-tree dry-run merge (textual). Catches collisions the claims didn't predict.

Defaults to every branch named in an active peer claim; pass against_branch to check one specific branch.

update_status(status, note="") — set your own claim's status (planning | in-progress | done) and optionally leave a note for your partner. Pushes immediately. On done, the claim is auto-annotated with changed_files — your branch's diffstat vs the default branch — so your partner reconciles against real data, not just a hand-written summary. It is computed in the board repo, and a claim records a branch name with no repo qualifier, so changed_files_repo names the repo the diffstat actually came from: where you coordinate on a dedicated board repo, a same-named branch there will diff cleanly and produce a confidently wrong file list. Check the label before trusting the list. (To drop a claim without finishing it, use release().)

finish(note="", title="", draft=False) — close the loop: mark your claim done and open a GitHub pull request from your claimed branch into the default branch. Falls back to your claim's task/note for the PR title/body, and returns the existing PR's URL if one is already open. Your branch must be pushed. (Needs gh.)

history(limit=20) — the coordination timeline (who claimed, finished, or released what, and when) read from the git history of claims.json, newest first. Answers "what has my partner been up to?" even when they're offline.

The workflow (what your agent does)

  1. provision(...)once, only if the repo doesn't exist yet (then both clone)

  2. survey() — what's my partner working on, if anything?

  3. plan a slice that doesn't overlap their active work

  4. claim(...) — if blocked, narrow the slice or wait

  5. build on your branch

  6. survey() again — where are they now?

  7. check_conflicts() — does their landed work collide with mine?

  8. reconcile (rebase/merge or flag) → update_status("done", ...) or finish(...) to also open a PR

The full prompt your agent should run is in AGENTS.md.

More than two agents

Nothing here is limited to two. claims.json is keyed by agent id, claim() checks your plan against every peer, and the compare-and-swap only ever edits your own key — so three, four, or more agents coordinate safely. To run a team:

  • Invite everyone: add_collaborator("alice, bob, carol") (or list them in provision(partner_github=...)).

  • Give every agent a unique AGENTSYNC_AGENT_ID — every agent, not every person. One person running a desktop session, a phone and a remote agent needs three ids, for the same reason three people do: one id holds exactly one claim. claim() blocks rather than overwriting a live claim under your own id, but a unique id per agent avoids the collision entirely.

    This guard used to key on a per-process token, which meant it caught a restarted server and waved through a concurrent session -- one agentsync process serves every session on a machine, so two sessions shared the token and silently overwrote each other. It now keys on the work: a claim for a different task, while one is in progress under your id, is refused whatever process wrote it. Re-claiming the same task stays free, which is how you widen touches mid-unit. release(expect_task=...) covers the other direction, refusing to close a claim that is not the one you think you hold.

  • Contention stays cheap for a handful of agents; with many simultaneous claimers a claim() can return retry_exhausted — just call survey() and retry.

Test

python3 test_agentsync.py     # unit + protocol suite (real git repos)
python3 test_workflow.py      # two-person lifecycle + real MCP stdio transport

test_agentsync.py (51 cases, isolated per test) covers the protocol (claim/ block on shared files and dependency-on-WIP, force override, done-claims-don't- block, status validation), path-aware overlap (directory containment, globs, normalization, disjoint-dirs-are-clean), conflict detection (textual conflict and clean-merge), the compare-and-swap guarantee (a peer claim landing mid-flight both survives our retry and is observed in time to block a collision), liveness (release, stale flagging, the live-claim guard against concurrent sessions), the review loop (history timeline, done diffstat capture, finish opening/reusing a PR, push-required guard), error paths, and provisioning + add_collaborator (single and multi-invite, partner-from-env, existing-remote skip, invite-failure reporting, bad-permission, no-remote) with the gh CLI stubbed so no real GitHub repo is touched. test_workflow.py (5 cases) drives the full two-person lifecycle and the real MCP stdio transport as a subprocess. CI runs both on every push via GitHub Actions.

Limitations

  • Textual, not semantic. check_conflicts catches files that won't merge; it does not catch "their API signature change breaks my caller." That reasoning is the agent's job (read both diffs) — the server gives it the signal, not the judgment.

  • Both sides must opt in. This only works fully if your partner's agent runs the same server and honors the same claim protocol. Without that, yours degrades to branch inspection: it sees what has landed, not what's planned.

  • Advisory locks. Claims prevent collisions by convention, not enforcement; force=True exists precisely because some overlaps are fine.

License

PolyForm Noncommercial License 1.0.0 — free to use, modify, and share for any noncommercial purpose. Commercial use requires a separate license.

Available Tools

9 tools
add_collaboratorA

Invite one or more people as collaborators on the shared repo so they can push to it. Use this when the repo already exists and you just want to grant partners access (provision() does this too, but only as part of first-time setup). This is how you build a team of more than two.

github_username : one or more GitHub users, comma- or space-separated (e.g. "jarmstrong158" or "alice, bob, carol"). permission : pull | triage | push | maintain | admin (default push).

Each invited user must accept the GitHub invitation before they can push. Requires the gh CLI authenticated with admin on the repo. Returns the clone URL to hand the new collaborators.

ParametersJSON Schema
NameRequiredDescriptionDefault
permissionNopush
github_usernameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses that invitees must accept GitHub invitation before pushing, requires gh CLI authenticated with admin, and returns the clone URL. These are critical behavioral traits not inferable from schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five sentences, front-loaded with purpose, then usage, parameters, and caveats. Every sentence adds distinct value with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers action, when to use, parameter syntax, prerequisites, return value, and invitation acceptance flow. Complete for a simple tool with an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has no descriptions (0% coverage). The description fully explains github_username with format and examples, and permission with allowed values and default, adding all necessary semantics beyond raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb 'Invite' and resource 'collaborators on the shared repo' clearly defined. Distinguishes from sibling provision by explicitly stating provision does this only during first-time setup, while this tool is for existing repos.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use: 'Use this when the repo already exists and you just want to grant partners access.' Names provision() as an alternative and clarifies the difference. Also notes prerequisite authentication and invitation acceptance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_conflictsA

Detect conflicts between your branch and your partners' branches.

Reports two levels: claim_overlap : set intersection of touched files (intent level) merge_conflict : a real dry-run merge via git merge-tree (textual)

against_branch lets you check one specific branch; default checks every branch named in a peer's active claim. Your own branch is taken from your current claim.

claim_overlap is intent-level, so it only exists where intent was declared. If against_branch names a branch no active claim mentions, claim_overlap is reported as an explicit {"status": "unknown"} object naming the reason — never as an empty list, which would read as a verified all-clear.

ParametersJSON Schema
NameRequiredDescriptionDefault
against_branchNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it delivers. It explains the two detection levels, clarifies that claim_overlap only exists where intent was declared, and warns that an unknown branch yields an explicit 'status':'unknown' object rather than an empty list, preventing misinterpretation of all-clear results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded: it starts with the main purpose, then uses bullet-like lines to describe the two levels, followed by the scoping rule. Each sentence adds meaningful information without redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no annotations, this description is thorough. It covers the tool's behavior, edge cases, and scoping options, while the presence of an output schema means return-value details are already represented elsewhere. It fully enables an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides only a parameter name and default, with 0% description coverage. The description fully compensates by explaining the semantics of against_branch: it checks one specific branch, while the default checks all peer branches in active claims. It also mentions the edge case of naming a branch with no active claim.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb and resource: 'Detect conflicts between your branch and your partners' branches.' It clearly distinguishes the tool's intent from siblings by naming two concrete output levels, claim_overlap and merge_conflict, which are unique to conflict checking.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use the tool and how to vary its scope: 'default checks every branch named in a peer's active claim' and 'against_branch lets you check one specific branch.' It does not explicitly mention alternatives or when-not-to-use cases, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

claimA

Stake a claim on a unit of work.

touches : files/modules you will modify requires : files/modules you depend on (omit if none) branch : the branch your work will live on force : claim even if an overlap with an active peer claim is detected

Refuses (status="blocked") if your plan collides with a peer's active claim, returning exactly what overlaps and with whom, unless force=True. The overlap is evaluated against freshly fetched state immediately before the push, so a peer who claimed first will be seen here.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskYes
forceNo
branchNo
touchesYes
requiresNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description fully shoulders the transparency burden. It discloses the refusal behavior with status='blocked', the overlap evaluation against freshly fetched state, the force flag semantics, and that it returns exact overlap details. This goes well beyond the minimum.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is tightly organized: a one-line purpose, a bullet-style parameter list, and a focused explanation of collision handling. Every sentence contributes value, and the formatting enhances readability without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description thoroughly covers the claim's conflict behavior, force semantics, and state freshness, which are the tool's complex aspects. Missing pieces include the 'task' parameter definition and any explicit usage guidance, though the output schema may handle return value details. Overall, it is quite complete but has notable gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description explains the meaning of touches, requires, branch, and force in plain language, which is essential given the schema has 0% description coverage. However, it completely omits the required 'task' parameter, leaving its purpose ambiguous and reducing the overall semantic coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb+resource statement ('Stake a claim on a unit of work') and elaborates with parameter meanings and collision behavior. This distinguishes it from sibling tools like check_conflicts and release by describing a claim creation action with exclusive overlap detection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies this tool is for claiming work and explains the force option, but it does not explicitly state when to use it versus alternatives such as check_conflicts or release. There is no mention of exclusions or alternative tool recommendations, so usage guidance is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

finishA

Close the loop: mark your claim done AND open a GitHub pull request from your claimed branch into the default branch, so your work lands in review.

note : PR body (falls back to your claim's existing note). title : PR title (falls back to your claim's task). draft : open the PR as a draft.

Your branch must already be pushed. If a PR for the branch already exists, its URL is returned instead of erroring. Requires the gh CLI. The claim is marked done (with auto-captured changed_files) after the PR is opened.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo
draftNo
titleNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does this well. It discloses side effects (claim marked done, PR opened), ordering ('after the PR is opened'), external dependency (gh CLI), a precondition (branch must be pushed), and an idempotent fallback (returns existing PR URL instead of erroring).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, then uses compact labeled lines for parameters, followed by a concise block of behavioral notes. Every sentence adds useful information, and the structure makes it easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers prerequisites, side effects, fallback behavior, and the gh CLI requirement. Since an output schema exists, the description does not need to explain return values, and it even mentions the existing-PR return behavior. It is complete for an agent selecting and invoking the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description compensates fully. It maps note to PR body with fallback to claim note, title to PR title with fallback to claim task, and draft to opening the PR as draft. This gives the agent meaningful guidance beyond the raw property names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb+resource pair: 'mark your claim done AND open a GitHub pull request from your claimed branch into the default branch.' This unambiguously states what the tool does and distinguishes it from siblings like claim, update_status, or release by combining completion of the claim with PR creation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit context for when to use the tool: after the branch is pushed and when ready to move work into review. It also mentions the gh CLI requirement and the behavior if a PR already exists. However, it does not explicitly name alternative tools or state when not to use it, so it stops short of a perfect score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

historyA

The coordination timeline: who claimed, finished, or released what, and when — read from the git history of claims.json. Newest first. limit caps how many events are returned. Useful for 'what has my partner been doing?' without needing them online.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the source (git history of claims.json), ordering (newest first), and limiting behavior (`limit` caps events), effectively conveying a read-only operation without side effects. It does not mention potential errors or auth requirements, but the described behavior is sufficient for this simple read tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the main purpose and followed by a practical use case. Every sentence adds value, and there is no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and only one optional parameter, the description covers the essential aspects: purpose, source, ordering, limiting, and a suggested scenario. It is complete enough for an agent to select and invoke this tool correctly without additional context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has only a 'limit' parameter with no description (0% coverage). The description explicitly explains that `limit` caps how many events are returned, giving the parameter clear meaning and compensating fully for the missing schema description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it provides a coordination timeline from git history, listing who claimed, finished, or released what and when. This is specific and distinct from sibling tools that perform actions like claim, finish, release, etc., so it differentiates itself well.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a concrete use case: 'what has my partner been doing?' without needing them online, implying it is the appropriate tool for checking activity asynchronously. It does not explicitly mention when not to use it or name alternatives, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

provisionA

Create the shared GitHub repository if it doesn't exist yet, then leave both collaborators ready to use the claim protocol. Run this ONCE, by one person, before anyone calls survey()/claim(). It is idempotent — safe to re-run; each step is skipped if already done.

What it does, in order:

  1. Ensure AGENTSYNC_REPO is a local git repo with at least one commit (creates the directory + a starter README if empty).

  2. Create the repo on GitHub via gh (private unless private=False) and wire up the 'origin' remote, or reuse an existing remote/repo.

  3. Push the default branch.

  4. Seed the coordination branch (agentsync) with an empty claims.json.

  5. Invite the partner(s) as push collaborators, if any usernames are given here or via AGENTSYNC_PARTNER_GITHUB.

repo : 'owner/name', bare 'name' (owner = you), or '' to use the AGENTSYNC_REPO folder name. partner_github : one or more GitHub usernames to invite, comma- or space-separated (overrides env). Supports a whole team. private : create the repo private (default) or public. description : optional GitHub repo description.

Requires the gh CLI, authenticated (gh auth login) with 'repo' scope. Returns a summary of what was created plus the clone URL to send your partners.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoNo
privateNo
descriptionNo
partner_githubNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully carries the transparency burden. It discloses the exact order of operations, that steps are skipped if already done, that it creates local files and a remote repo, pushes, seeds, and invites partners. It also notes the auth requirement, providing a comprehensive behavioral picture.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured, starting with the core purpose, then a numbered step list, then parameter notes. It is long but each sentence provides value—no fluff, clear headings, and appropriate front-loading.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, the description fully covers prerequisites, actions, idempotency, and return value ('Returns a summary... plus the clone URL'). The presence of an output schema means return format details need not be repeated, and the description still mentions the key output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description compensates thoroughly. It explains each parameter: repo (owner/name, bare name, or empty), partner_github (usernames, separators, override), private (default private), and description (optional). This adds critical meaning beyond the schema's type/default fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Create the shared GitHub repository if it doesn't exist yet, then leave both collaborators ready to use the claim protocol.' It uses a specific verb (create) and resource (GitHub repository), and the detailed numbered steps distinguish it from sibling tools like survey/claim.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance is given: 'Run this ONCE, by one person, before anyone calls survey()/claim().' It also mentions idempotency and prerequisites (gh CLI, auth), making it clear when to use versus relying on sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

releaseA

Abandon your current claim WITHOUT marking it done, freeing the files you were holding so a partner can take them over. Use this when you're dropping the task or stepping away — otherwise a crashed or abandoned claim blocks those files indefinitely (the only other exits are 'done' or manual git surgery). Pushes immediately.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses key behavioral traits: it abandons without marking done, frees files for a partner, and pushes immediately. It also warns about the consequence of not using it (blocked files). Since there are no annotations, the description carries the full burden and does so well, though it omits details like reversibility or permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only two sentences, front-loaded with the core action, and every sentence provides value. It is concise without being under-specified, covering purpose, usage context, and a critical warning in a compact form.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for the tool's main purpose: it clearly explains what the tool does, when to use it, and the immediate effect. It lacks explanation of the 'note' parameter, but given the simple optional parameter and presence of an output schema, the overall context is well-covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one parameter 'note' with no description, and the tool description does not mention this parameter at all. With 0% schema description coverage, the description was expected to explain the parameter's meaning, but it completely ignores it, leaving users to guess what 'note' does.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states exactly what the tool does: 'Abandon your current claim WITHOUT marking it done, freeing the files you were holding so a partner can take them over.' This uses specific verbs and resources, and clearly distinguishes from siblings like 'finish' (which likely marks done) and 'claim' (which acquires a claim).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use it: 'Use this when you're dropping the task or stepping away.' It also names alternatives: 'the only other exits are 'done' or manual git surgery,' providing clear decision-making context versus sibling tools like 'finish.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

surveyA

Pull the latest coordination state and report what every other agent has claimed: task, files touched, dependencies, branch, status, timestamp. Works for any number of collaborators, not just one.

Each partner entry is annotated with age_hours and a stale flag (an in-progress claim older than AGENTSYNC_STALE_HOURS, default 24h) so you can spot a partner who may have crashed or wandered off still holding files. Call this before planning and again after finishing work.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description discloses the stale flag semantics, age_hours, and the AGENTSYNC_STALE_HOURS default, and clarifies it reports on *other* agents only. It does not explicitly state read-only behavior, but 'Pull' implies non-mutating.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two paragraphs, every sentence adds value; front-loaded with the core function, then flags and usage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-input read tool with an output schema, the description covers the important output semantics (stale flag, default threshold, scope) and provides usage guidance; nothing obvious missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters, so the description needn't explain any. Baseline 4 applies since there's nothing to document.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool 'Pull[s] the latest coordination state' and enumerates the specific fields reported (task, files touched, dependencies, branch, status, timestamp), distinguishing it from sibling tools like claim, release, or check_conflicts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Call this before planning and again after finishing work,' giving clear timing. It also notes it works for any number of collaborators, but does not explicitly name alternatives or when-not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_statusA

Update your own claim's status (e.g. 'in-progress' -> 'done') and optionally attach a note for your partner. Pushes immediately. On 'done' the claim is auto-annotated with changed_files (your branch's diffstat vs the default branch). To drop a claim without finishing it, use release(); to finish AND open a PR, use finish().

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo
statusYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite lacking annotations, the description discloses key behavioral traits: pushes immediately, auto-annotates with changed_files on 'done', and notes are for a partner. It could add details on reversibility or error handling, but the side-effect disclosure is substantive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the main action, then behavioral details, then alternative tools. No fluff; every clause adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 params, no annotations), the description covers purpose, usage, parameters, behavior, and alternatives. Output schema exists so return values need not be described. Complete for an agent to select and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain parameters. It does so by defining 'status' (with an example transition) and 'note' (for the partner). It doesn't enumerate all allowed statuses, but the example provides sufficient guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool updates your own claim's status, with a concrete example and optional note attachment. It distinguishes itself from sibling tools by naming release() and finish() as alternatives for different workflows.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly describes when to use this tool versus alternatives: 'To drop a claim without finishing it, use release(); to finish AND open a PR, use finish().' Also implies the constraint that you can only update your own claim.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 9 tool updatesv1.0.0
    • First observedadd_collaborator
    • First observedcheck_conflicts
    • First observedclaim
    • First observedfinish
    • First observedhistory
    • First observedprovision
    • First observedrelease
    • First observedsurvey
    • First observedupdate_status

TDQS

A4.4/5.0
Disambiguation4/5

Most tools have clearly distinct purposes, with only minor overlap between provision and add_collaborator (both can add collaborators, but provision is for first-time setup) and between update_status and finish (both can mark done, but finish also opens a PR). The descriptions explicitly call out these differences, reducing ambiguity.

Naming Consistency3/5

Tool names mix verb_noun patterns (add_collaborator, check_conflicts, update_status) with bare verbs (provision, claim, release, finish) and one noun (history). While still readable, the naming convention is not consistent across the set.

Tool Count5/5

With 9 tools covering the full collaboration workflow (setup, claiming, surveying, conflict checking, status updates, release, finish, and history), the count is well-scoped for the server's purpose and does not feel padded or incomplete.

Completeness4/5

The tool surface covers the core lifecycle: provision and add_collaborator for setup, claim for staking work, survey and history for state visibility, check_conflicts for verification, and update_status/release/finish for progress and completion. Minor gaps exist, such as no direct way to view or edit your own claim details without using survey or re-claiming, but these are workaroundable.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables multiple AI coding agents to collaborate on the same Git repository without conflicts through isolated worktrees, file locking, automated test verification, and a serialized merge queue.
    7
    6
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables multiple AI coding agents to safely collaborate in the same git working tree by managing file ownership, merging writes, and preventing snapshot races.
    30
    2
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jarmstrong158/agentsync'

If you have feedback or need assistance with the MCP directory API, please join our Discord server