# sync82 (mcpb · sync82.mcpb)

Persistent, structured project memory for AI coding agents, stored locally in SQLite.

- Trust score: 51/100 (low)
- Change this week: +32
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-17

## Components

- mcpb · `sync82.mcpb`: 51/100 (this document), [markdown](https://verifymcp.io/servers/oito2-mcp-sync82/sync82.md), [page](https://verifymcp.io/servers/oito2-mcp-sync82/sync82)

## Channel facts

- Registry: `mcpb`
- Package: `https://github.com/oito2/mcp-sync82/releases/download/v1.3.0/sync82.mcpb`
- Version: `1.3.0`
- Transport: `stdio`
- SHA-256: `6afac2ba266d683b1adc9fb409364e13cc9a7e54a00f7adbafffcb286a2f972a`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-17.

- **Supply Chain Security**: 0/100
  - No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.
  - Known CVEs could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).
  - Install-script risk not yet assessed.
  - Dependency health could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).
- **Provenance & Transparency**: 97/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to oito2/mcp-sync82).
  - Clear OSI-approved license (GPL-3.0-or-later).
  - Actively maintained (last published 8 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 74/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 7787 tokens (~409/item across 19 items; 19 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (21% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 19 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

**Unverified: 2 categories.** Categories scored 0 because we could not verify them: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### How do I install the sync82 MCP server?

sync82 ships as an MCPB bundle, a single file you download and open in an MCP host that supports MCPB bundles, such as Claude Desktop. The host reads the launch command from the bundle's own manifest, so there is no command to copy. Before opening it, check the file's SHA-256 matches the one the MCP registry declares for it, 6afac2ba266d683b1adc9fb409364e13cc9a7e54a00f7adbafffcb286a2f972a; the commands to do that are on this page. If it does not match, do not open it.

- Download bundle: `https://github.com/oito2/mcp-sync82/releases/download/v1.3.0/sync82.mcpb`
- SHA-256: `6afac2ba266d683b1adc9fb409364e13cc9a7e54a00f7adbafffcb286a2f972a`

### Verify on macOS / Linux

```bash
echo "6afac2ba266d683b1adc9fb409364e13cc9a7e54a00f7adbafffcb286a2f972a  sync82.mcpb" | shasum -a 256 -c
```

### Verify on Windows (PowerShell)

```powershell
(Get-FileHash -Algorithm SHA256 .\sync82.mcpb).Hash -eq "6afac2ba266d683b1adc9fb409364e13cc9a7e54a00f7adbafffcb286a2f972a"
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-14 (score 51, +32)

- [security improvement] Injection markers: unverified → pass
- [security] First check of Judged manipulation: pass
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] Schema quality: unverified → 100
- [functional improvement] MCP protocol: unverified → pass
- [functional] First check of Schema quality: fail
- [functional] First check of Schema quality: excellent
- [functional] First check of Schema quality: fail
- [functional] First check of Destructive annotations: 100
- [functional] First check of Tool coverage: 21
- [functional] First check of Tool coverage: 100

### 2026-10-10 (score 19, 0)

- [functional] Package version: 1.0.0 → 1.3.0

### 2026-10-07 (score 19)

First indexed and scored.

## MCP tools (19)

### `append_memory` (~312 tokens)

Append a new dated entry to an append-only memory file (progress, decisions, or a custom kind). IMPORTANT: progress and decisions require a "## YYYY-MM-DD" date header somewhere in content. Overwrite-style files (memory, architecture, stack, next_steps, or a custom kind created with write_memory) are rejected — use write_memory for them.

Input parameters:

- `content` (string, required): The content to append. For "progress"/"decisions", must contain a "## YYYY-MM-DD" header.
- `filename` (string, required): The file/kind to append to (e.g. "progress", "decisions", or a custom name).
- `path` (string): Base path where the memory is stored. If left blank, uses the default vault path. A leading "~", "HOME" or "$HOME" (e.g. "~/vaults/work.db", "HOME/custom-vault") is expanded to the user's home direct…
- `project` (string): Project name. If omitted, auto-discovered from workspace_root or the last used project.
- `search_parent_dirs` (boolean): If true, also look for .sync82.json in parent directories above workspace_root (useful in monorepos, where the marker file lives at the repo root). Defaults to false — only workspace_root itself is c…
- `subproject` (string): Subproject name.
- `workspace_root` (string): Path to your project folder, used to auto-discover the project via .sync82.json.

### `archive_memory` (~474 tokens)

Archive old dated entries from progress.md or decisions.md, keeping only the last N days active (counted in UTC). Entries without a date header are never archived. Archived entries leave the loaded context; to keep what they said, first call with dry_run: true (lists the entries that would be archived, writes nothing), read them with read_memory, then call again with summary: the summary is added as a new active entry in the same step, dated today (UTC) and headed "## YYYY-MM-DD — Summary of N archived entries (from … to …)" unless it has its own "## YYYY-MM-DD" header, which must not be older than the archive cutoff. The project must be given via project or workspace_root, not taken from the last session.

Input parameters:

- `dry_run` (boolean): List the entries that would be archived (date and first line) without changing anything.
- `filename` (string, required): Which append-only file to archive.
- `keep_days` (integer): Entries older than this many days are archived (default 90, maximum 36500).
- `path` (string): Base path where the memory is stored. If left blank, uses the default vault path. A leading "~", "HOME" or "$HOME" (e.g. "~/vaults/work.db", "HOME/custom-vault") is expanded to the user's home direct…
- `project` (string): Project name. If omitted, auto-discovered from workspace_root; unlike other tools, the last used project is refused.
- `search_parent_dirs` (boolean): If true, also look for .sync82.json in parent directories above workspace_root (useful in monorepos, where the marker file lives at the repo root). Defaults to false — only workspace_root itself is c…
- `subproject` (string): Subproject name.
- `summary` (string): A summary of the entries being archived, written by you, added as one new active entry in the same step. Without its own "## YYYY-MM-DD" header it gets one dated today; its own header must not be old…
- `workspace_root` (string): Path to your project folder, used to auto-discover the project via .sync82.json.

### `check_project_health` (~499 tokens)

Report which of the six standard memory files exist for a project. A missing current-state file (memory, architecture, stack, next_steps) makes the project unhealthy; progress or decisions with no entry yet only gets a warning. Other warnings point at memory that may be out of date: a current-state file (memory, architecture, stack, next_steps) not updated for stale_days (default 30) while progress or decisions got newer entries, a standard file still empty or holding the blank template, undated progress/decisions entries, and a log with more than 200 active entries. With all_projects: true it checks every project and subproject of the vault instead, one line each, then the details of the ones that are not healthy. Returns an error result (isError: true) when the project (or any project) is unhealthy (a current-state file is missing) — a deliberate signal for the calling agent to act on, not a crash; warnings alone never make it unhealthy.

Input parameters:

- `all_projects` (boolean): Check every project and subproject of the vault (the one named by path, or the default vault) instead of one project. Can't be combined with project, subproject or workspace_root.
- `format` (string): "text" (default) for readable text, or "json" for a JSON document with the same information, also returned as structured content.
- `path` (string): Base path where the memory is stored. If left blank, uses the default vault path. A leading "~", "HOME" or "$HOME" (e.g. "~/vaults/work.db", "HOME/custom-vault") is expanded to the user's home direct…
- `project` (string): Project name. If omitted, auto-discovered from workspace_root or the last used project.
- `search_parent_dirs` (boolean): If true, also look for .sync82.json in parent directories above workspace_root (useful in monorepos, where the marker file lives at the repo root). Defaults to false — only workspace_root itself is c…
- `stale_days` (integer): Days after which a current-state file older than the newest progress/decisions entry is reported as possibly out of date (default 30).
- `subproject` (string): Subproject name.
- `workspace_root` (string): Path to your project folder, used to auto-discover the project via .sync82.json.

Output parameters:

- `files` (object)
- `healthy` (boolean)
- `project` (string)
- `projects` (array)
- `vault` (string)
- `warnings` (array)

### `create_project` (~143 tokens)

Create a new project (or subproject of an existing project) in the vault. Safe to call again — an existing project is reported, not duplicated.

Input parameters:

- `path` (string): Base path where the memory is stored. If left blank, uses the default vault path. A leading "~", "HOME" or "$HOME" (e.g. "~/vaults/work.db", "HOME/custom-vault") is expanded to the user's home direct…
- `project` (string, required): Project name (alphanumeric, hyphens, underscores).
- `subproject` (string): Subproject name. When provided, creates it under "project" instead of at the vault root.

### `delete_memory` (~297 tokens)

Permanently delete a custom memory file. Requires confirm: true — ask the user before calling this with confirm: true. The six standard files (memory, architecture, stack, decisions, progress, next_steps) cannot be deleted this way — use write_memory to clear their content instead. The project must be given via project or workspace_root, not taken from the last session.

Input parameters:

- `confirm` (boolean, required): Must be true to confirm permanent deletion. Ask the user before setting this.
- `filename` (string, required): The custom file/kind to delete.
- `path` (string): Base path where the memory is stored. If left blank, uses the default vault path. A leading "~", "HOME" or "$HOME" (e.g. "~/vaults/work.db", "HOME/custom-vault") is expanded to the user's home direct…
- `project` (string): Project name. If omitted, auto-discovered from workspace_root; unlike other tools, the last used project is refused.
- `search_parent_dirs` (boolean): If true, also look for .sync82.json in parent directories above workspace_root (useful in monorepos, where the marker file lives at the repo root). Defaults to false — only workspace_root itself is c…
- `subproject` (string): Subproject name.
- `workspace_root` (string): Path to your project folder, used to auto-discover the project via .sync82.json.

### `delete_project` (~250 tokens)

Permanently delete a project or subproject from the vault. Requires confirm: true — ask the user before calling this with confirm: true. A top-level project with subprojects also needs subproject_action; with "delete_all", pass expected_subprojects, the number of subprojects you showed the user, and nothing is deleted when the vault holds another number.

Input parameters:

- `confirm` (boolean, required): Must be true to confirm permanent deletion. Ask the user before setting this.
- `expected_subprojects` (integer): Required with subproject_action "delete_all": the number of subprojects shown to the user. Nothing is deleted when the project has another number.
- `path` (string): Base path where the memory is stored. If left blank, uses the default vault path. A leading "~", "HOME" or "$HOME" (e.g. "~/vaults/work.db", "HOME/custom-vault") is expanded to the user's home direct…
- `project` (string, required): Project name to delete.
- `subproject` (string): Subproject name. When provided, only that subproject is deleted.
- `subproject_action` (string): Required only when deleting a top-level project that has subprojects.

### `edit_entry` (~559 tokens)

Change one entry of an append-only memory file (progress, decisions, or a custom append kind), identified by entry_id — get the ids from read_memory with with_ids: true (add archived: true for an archived entry), or from search_memory with format "json". action "replace" rewrites the entry in place (its position is kept; for progress/decisions content must contain a "## YYYY-MM-DD" header, which also sets the entry's date). action "supersede" appends content as a new entry and adds a "> Superseded by entry N on YYYY-MM-DD." line (today in UTC) to the old one, keeping the history auditable — prefer it when a decision changed rather than was wrong; an archived entry can't be superseded. action "delete" removes the entry permanently and requires confirm: true — ask the user first. The project must be given via project or workspace_root, not taken from the last session.

Input parameters:

- `action` (string, required): "replace": rewrite the entry in place. "supersede": append content as a new entry and mark the old one as superseded. "delete": remove the entry (requires confirm: true).
- `confirm` (boolean): Must be true for action delete. Ask the user before setting this.
- `content` (string): The new entry text, required for replace and supersede. For "progress"/"decisions", must contain a "## YYYY-MM-DD" header.
- `entry_id` (integer, required): The entry's id, as shown by read_memory with with_ids: true ("<!-- entry:N -->") or by search_memory's JSON output (entry_id).
- `filename` (string, required): The append-only file/kind the entry belongs to (e.g. "progress", "decisions", or a custom name).
- `path` (string): Base path where the memory is stored. If left blank, uses the default vault path. A leading "~", "HOME" or "$HOME" (e.g. "~/vaults/work.db", "HOME/custom-vault") is expanded to the user's home direct…
- `project` (string): Project name. If omitted, auto-discovered from workspace_root; unlike other tools, the last used project is refused.
- `search_parent_dirs` (boolean): If true, also look for .sync82.json in parent directories above workspace_root (useful in monorepos, where the marker file lives at the repo root). Defaults to false — only workspace_root itself is c…
- `subproject` (string): Subproject name.
- `workspace_root` (string): Path to your project folder, used to auto-discover the project via .sync82.json.

### `export_memory` (~381 tokens)

Export a project's memory to plain Markdown files (one per kind, e.g. memory.md, progress.md) on the local filesystem, for browsing or git-diffing outside an MCP client. output_dir must be absolute (or start with ~/ or HOME/) and may be any directory the server process can write to — it is not confined to the project's own vault or workspace; it is created if missing. Existing files are never replaced unless overwrite is true, and a destination that is a symlink or special file is always refused. A kind with archived entries also gets a <kind>.archived.md file holding them.

Input parameters:

- `output_dir` (string, required): Absolute directory (or starting with ~/ or HOME/) to write the exported .md files into. Required. Not confined to the vault or workspace. Created if missing.
- `overwrite` (boolean): Replace .md files that already exist in output_dir. Without it, the export is refused when any destination file exists, and nothing is written.
- `path` (string): Base path where the memory is stored. If left blank, uses the default vault path. A leading "~", "HOME" or "$HOME" (e.g. "~/vaults/work.db", "HOME/custom-vault") is expanded to the user's home direct…
- `project` (string): Project name. If omitted, auto-discovered from workspace_root or the last used project.
- `search_parent_dirs` (boolean): If true, also look for .sync82.json in parent directories above workspace_root (useful in monorepos, where the marker file lives at the repo root). Defaults to false — only workspace_root itself is c…
- `subproject` (string): Subproject name.
- `workspace_root` (string): Path to your project folder, used to auto-discover the project via .sync82.json.

### `get_vault_config` (~190 tokens)

Report the current effective vault configuration: active vault path, global config, and (if workspace_root is given) the local .sync82.json config for that workspace.

Input parameters:

- `path` (string): Base path where the memory is stored. If left blank, uses the default vault path. A leading "~", "HOME" or "$HOME" (e.g. "~/vaults/work.db", "HOME/custom-vault") is expanded to the user's home direct…
- `search_parent_dirs` (boolean): If true, also look for .sync82.json in parent directories above workspace_root (useful in monorepos, where the marker file lives at the repo root). Defaults to false — only workspace_root itself is c…
- `workspace_root` (string): Path to your project folder. If provided, the report also includes the local .sync82.json config for that workspace, if one exists.

### `import_memory` (~486 tokens)

Import a project's memory from plain Markdown files (one per kind, e.g. memory.md, progress.md) previously produced by export_memory — the inverse operation. Creates the project if it doesn't exist yet. Destructive per kind: an existing kind's content is overwritten, not merged, the same as write_memory; a <kind>.archived.md file restores that kind's archived entries, which are otherwise kept. input_dir must be absolute (or start with ~/ or HOME/) and may be any directory the server process can read — it is not confined to the vault or workspace. Symlinks, special files, files over 10 MB and README.md, CHANGELOG.md, LICENSE.md, CONTRIBUTING.md and CODE_OF_CONDUCT.md are skipped; the files may hold at most 64 MB in total. The import is all or nothing, and the result lists which files create a new kind and which overwrite an existing one; with dry_run: true nothing is written and the result shows what would happen.

Input parameters:

- `dry_run` (boolean): Report what the import would create and overwrite without writing anything.
- `input_dir` (string, required): Absolute directory (or starting with ~/ or HOME/) to read exported .md files from. Required. Not confined to the vault or workspace. Every "<kind>.md" file present is imported; files that aren't vali…
- `path` (string): Base path where the memory is stored. If left blank, uses the default vault path. A leading "~", "HOME" or "$HOME" (e.g. "~/vaults/work.db", "HOME/custom-vault") is expanded to the user's home direct…
- `project` (string): Project name. If omitted, auto-discovered from workspace_root; unlike other tools, the last used project is refused.
- `search_parent_dirs` (boolean): If true, also look for .sync82.json in parent directories above workspace_root (useful in monorepos, where the marker file lives at the repo root). Defaults to false — only workspace_root itself is c…
- `subproject` (string): Subproject name.
- `workspace_root` (string): Path to your project folder, used to auto-discover the project via .sync82.json.

### `init_project_memory` (~850 tokens)

Initialize memory files for a project or subproject with structured content.

STEP 1 — VAULT SELECTION
If the user has not explicitly specified a vault path, call get_vault_config first.
If global_vault_configured is true, ask:
  "A global vault is configured at <global_vault_path>. Do you want to use it? (yes/no)"
  \- Yes → pass that path as "path". No → leave "path" empty.

STEP 2 — PROJECT OR SUBPROJECT?
IMPORTANT: Before calling this tool, determine whether the target is a top-level project or a subproject.

Clues that it IS a subproject: words like "plugin", "module", "package", "extension", "component", "library", "service" in the user's request.
When uncertain: ASK the user — "Is this a subproject of an existing project? If yes, which project?"

If it is a subproject, set both "project" (the parent) and "subproject" (the component name).

If workspace_root is provided:
  \- The tool reads .sync82.json at workspace_root itself (pass search_parent_dirs: true to also look in parent directories, e.g. a monorepo root).
  \- If found with a "subproject" field: re-initializes that subproject.
  \- If found with only "project": re-initializes the root project.
  \- If not found: creates a new .sync82.json at workspace_root.

STEP 3 — PROJECT DATA
Ask the user: "How do you want to define the project data?
  1\. Auto-analyze (recommended — I will read the project files)
  2\. Enter manually"

If option 1: set auto_detect: true with workspace_root.
If option 2: ask these questions (skip any the user can't answer yet):
  1\. What does the project do? (description)
  2\. What is the main goal?
  3\. What is the current phase? (planning / mvp / active / maintenance)
  4\. Describe the architecture briefly.
  5\. What are the main components? (comma-separated)
  6\. What languages are used?
  7\. What frameworks and libraries are used?
  8\. What infrastructure is used?
  9\. What are the immediate next tasks?

Only files that are empty or contain the blank template will be written.

Input parameters:

- `architecture_overview` (string): Brief architecture description.
- `auto_detect` (boolean): When true, analyzes the files at workspace_root to infer description, languages, frameworks, and infrastructure automatically. Requires workspace_root.
- `components` (string): Main components, comma-separated.
- `description` (string): What the project does.
- `frameworks` (string): Frameworks and libraries used.
- `goal` (string): The main goal or objective.
- `infrastructure` (string): Infrastructure and hosting.
- `languages` (string): Programming languages used.
- `next_steps` (string): Immediate next tasks, comma or newline separated.
- `path` (string): Base path where the memory is stored. If left blank, uses the default vault path. A leading "~", "HOME" or "$HOME" (e.g. "~/vaults/work.db", "HOME/custom-vault") is expanded to the user's home direct…
- `phase` (string): Current phase: planning / mvp / active / maintenance.
- `project` (string): Project name. If omitted, auto-discovered from workspace_root or the last used project.
- `search_parent_dirs` (boolean): If true, also look for .sync82.json in parent directories above workspace_root (useful in monorepos, where the marker file lives at the repo root). Defaults to false — only workspace_root itself is c…
- `subproject` (string): Subproject name, if this is a component of an existing project.
- `workspace_root` (string): Path to your project folder. Enables .sync82.json auto-discovery for future sessions, and is required when auto_detect is true.

### `list_files` (~254 tokens)

List every memory file (document or entries kind) recorded for a project.

Input parameters:

- `format` (string): "text" (default) for readable text, or "json" for a JSON document with the same information, also returned as structured content.
- `metadata` (boolean): When true, include size, estimated tokens, and last-modified date per file.
- `path` (string): Base path where the memory is stored. If left blank, uses the default vault path. A leading "~", "HOME" or "$HOME" (e.g. "~/vaults/work.db", "HOME/custom-vault") is expanded to the user's home direct…
- `project` (string): Project name. If omitted, auto-discovered from workspace_root or the last used project.
- `search_parent_dirs` (boolean): If true, also look for .sync82.json in parent directories above workspace_root (useful in monorepos, where the marker file lives at the repo root). Defaults to false — only workspace_root itself is c…
- `subproject` (string): Subproject name.
- `workspace_root` (string): Path to your project folder, used to auto-discover the project via .sync82.json.

Output parameters:

- `files` (array)
- `project` (string)
- `vault` (string)

### `list_projects` (~113 tokens)

List every project and subproject currently in the vault.

Input parameters:

- `format` (string): "text" (default) for readable text, or "json" for a JSON document with the same information, also returned as structured content.
- `path` (string): Base path where the memory is stored. If left blank, uses the default vault path. A leading "~", "HOME" or "$HOME" (e.g. "~/vaults/work.db", "HOME/custom-vault") is expanded to the user's home direct…

Output parameters:

- `projects` (array)
- `vault` (string)

### `load_project_context` (~547 tokens)

Load a project's memory (every non-blank file) concatenated into one context block, ready to paste into a new session. Overwrite-style files (memory, architecture, stack, next_steps) are always included in full, since they represent current state, not history, and come first. By default (mode "summary") only the 10 most recent dated entries of each log (progress, decisions, custom append kinds) are included and the response is cut at 40 KB; a footer says how many entries were left out. mode "full" includes every entry, cut at 200 KB. "since", "max_entries" and "max_bytes" override these defaults; the response is cut at max_bytes with a note saying so.

Input parameters:

- `files` (array): Only load these specific files/kinds, instead of everything.
- `max_bytes` (integer): Cut the response at this many bytes (default 40960, i.e. 40 KB, in summary mode; 204800, i.e. 200 KB, in full mode), with a note when it is cut.
- `max_entries` (integer): Only include the most recent N dated entries per append-only kind (summary mode default: 10). Overwrite-style files are unaffected.
- `mode` (string): "summary" (default): the 10 most recent dated entries per log, cut at 40 KB. "full": every entry, cut at 200 KB. since, max_entries and max_bytes override these defaults.
- `path` (string): Base path where the memory is stored. If left blank, uses the default vault path. A leading "~", "HOME" or "$HOME" (e.g. "~/vaults/work.db", "HOME/custom-vault") is expanded to the user's home direct…
- `project` (string): Project name. If omitted, auto-discovered from workspace_root or the last used project.
- `search_parent_dirs` (boolean): If true, also look for .sync82.json in parent directories above workspace_root (useful in monorepos, where the marker file lives at the repo root). Defaults to false — only workspace_root itself is c…
- `since` (string): Only include dated entries (progress, decisions, custom append kinds) on or after this date ("YYYY-MM-DD"). Undated entries are always included. Overwrite-style files are unaffected. In summary mode,…
- `subproject` (string): Subproject name.
- `workspace_root` (string): Path to your project folder, used to auto-discover the project via .sync82.json.

### `read_memory` (~462 tokens)

Read a memory file's content. For an append-only kind (progress, decisions, or a custom append kind), returns every non-archived entry concatenated in date order. With with_ids: true, each entry is preceded by a "<!-- entry:N -->" line giving the id that edit_entry takes; these lines are never stored if the content is written back. With archived: true, it returns only the entries archive_memory archived instead, so with with_ids: true they can be replaced or deleted with edit_entry. The response is cut at max_bytes (default 1 MB) with a note saying so; load_project_context with since or max_entries reads part of a long log.

Input parameters:

- `archived` (boolean): Read only the archived entries of an append-only kind instead of the active ones. An overwrite-style file has no archived entries and is refused.
- `filename` (string, required): The file/kind to read (e.g. "memory", "progress", or a custom name).
- `max_bytes` (integer): Size cap of the response in bytes (default 1048576, i.e. 1 MB). Longer content is cut at a line break, with a note.
- `path` (string): Base path where the memory is stored. If left blank, uses the default vault path. A leading "~", "HOME" or "$HOME" (e.g. "~/vaults/work.db", "HOME/custom-vault") is expanded to the user's home direct…
- `project` (string): Project name. If omitted, auto-discovered from workspace_root or the last used project.
- `search_parent_dirs` (boolean): If true, also look for .sync82.json in parent directories above workspace_root (useful in monorepos, where the marker file lives at the repo root). Defaults to false — only workspace_root itself is c…
- `subproject` (string): Subproject name.
- `with_ids` (boolean): Put a "<!-- entry:N -->" line before each entry of an append-only kind, with the id edit_entry takes. No effect on overwrite-style files.
- `workspace_root` (string): Path to your project folder, used to auto-discover the project via .sync82.json.

### `rename_project` (~189 tokens)

Rename a project or subproject in place. Does not update any .sync82.json elsewhere that already points at the old name — those must be re-initialized (init_project_memory) or edited by hand afterward.

Input parameters:

- `new_name` (string, required): The new name (alphanumeric, hyphens, underscores).
- `path` (string): Base path where the memory is stored. If left blank, uses the default vault path. A leading "~", "HOME" or "$HOME" (e.g. "~/vaults/work.db", "HOME/custom-vault") is expanded to the user's home direct…
- `project` (string, required): The project to rename. When "subproject" is also given, renames that subproject instead of the top-level project.
- `subproject` (string): The subproject to rename, if renaming a subproject rather than the top-level project.

### `search_memory` (~643 tokens)

Search memory files. By default (match "words") finds the documents and entries holding every word of the query, in any order, ignoring case and accents ("decisao" finds "Decisão"), best matches first; a word ending in "*" matches as a prefix ("instal*"). match "phrase" needs the words in that order; match "exact" finds a literal case-insensitive substring, for paths or identifiers with punctuation. kinds limits the search to some files; since/until to dated entries in a date range. No project given searches the whole vault; project only searches that project and all its subprojects; project+subproject searches just that subproject. Each match is labeled project/file:line, or project/file[YYYY-MM-DD]:line for an entry of a dated log (line counted within that entry).

Input parameters:

- `context_lines` (integer): Number of surrounding lines to include per match (0-20, default 0).
- `format` (string): "text" (default) for readable text, or "json" for a JSON document with the same information, also returned as structured content.
- `kinds` (array): Only search these files/kinds (e.g. ["decisions"]).
- `limit` (integer): Maximum number of results to return (1-1000, default 100).
- `match` (string): "words" (default): every word, any order, accents and case ignored, ranked by relevance, "word*" for a prefix. "phrase": the words in that order. "exact": a literal case-insensitive substring, in fil…
- `offset` (integer): Number of results to skip, for pagination (default 0).
- `path` (string): Base path where the memory is stored. If left blank, uses the default vault path. A leading "~", "HOME" or "$HOME" (e.g. "~/vaults/work.db", "HOME/custom-vault") is expanded to the user's home direct…
- `project` (string): Limit the search to this project (and its subprojects, unless subproject is also given).
- `query` (string, required): What to search for, on a single line: words (match "words", the default), a phrase (match "phrase") or a literal substring (match "exact").
- `search_parent_dirs` (boolean): If true, also look for .sync82.json in parent directories above workspace_root (useful in monorepos, where the marker file lives at the repo root). Defaults to false — only workspace_root itself is c…
- `since` (string): Only search dated entries on or after this date ("YYYY-MM-DD"); documents and undated entries are left out.
- `subproject` (string): Limit the search to this specific subproject (requires project or workspace_root).
- `until` (string): Only search dated entries on or before this date ("YYYY-MM-DD"); documents and undated entries are left out.
- `workspace_root` (string): Path to your project folder, used to auto-discover the project via .sync82.json when project isn't given.

Output parameters:

- `next_offset` (integer)
- `query` (string)
- `results` (array)
- `scan_truncated` (boolean)
- `substring_fallback` (boolean)

### `update_project_memory` (~835 tokens)

Save session work to the project memory in a single call.

USE THIS TOOL when the user says something vague like:
\- "update the memory"
\- "save what we did today"
\- "record this session"
\- "update the project notes"

FLOW — follow these steps before calling:

1\. If the vault context is not already loaded, call load_project_context first
   to understand what is already recorded and avoid duplicating information.

2\. Analyze the current conversation and identify what changed:
   \- Decisions made → "decisions" field
   \- Work completed, features implemented → "progress" field
   \- Updated list of upcoming tasks → "next_steps" field
   \- Changed understanding of the project purpose or status → "memory" field
   \- Architectural changes → "architecture" field
   \- New tools, libraries, or infrastructure added → "stack" field
   \- Custom files (e.g. api, testing) → "custom" field

3\. Populate only the fields that actually changed. Leave others unset.

PROJECT — pass "project" or "workspace_root" when any field overwrites
(next_steps, memory, architecture, stack, or a custom item with mode
"write"): a project taken only from the last session is refused for them.
Appends alone (progress, decisions, custom "append") may use it.

WRITE RULES — how each field is stored:
\- "progress"     → APPENDED to progress   (log, never overwrites history)
\- "decisions"    → APPENDED to decisions  (log, never overwrites history)
\- "next_steps"   → OVERWRITES next_steps  (always reflects current state)
\- "memory"       → OVERWRITES memory      (always reflects current state)
\- "architecture" → OVERWRITES architecture
\- "stack"        → OVERWRITES stack
\- "custom"       → each item uses its own mode ("append" or "write", default "append")

FORMAT GUIDANCE:
\- For appended fields (progress, decisions): the date header "## YYYY-MM-DD" is REQUIRED and enforced.
  Example: "## 2026-04-23\n- Implemented OAuth2 token validation\n- Files: auth/token.go"
  Without this header the write will be reject…

Input parameters:

- `architecture` (string): Overwrites architecture with the full updated content.
- `custom` (array): Custom files outside the six standard ones, each with its own write mode.
- `decisions` (string): Appended to decisions. Must contain a "## YYYY-MM-DD" date header.
- `memory` (string): Overwrites memory with the full updated content.
- `next_steps` (string): Overwrites next_steps with the full updated content.
- `path` (string): Base path where the memory is stored. If left blank, uses the default vault path. A leading "~", "HOME" or "$HOME" (e.g. "~/vaults/work.db", "HOME/custom-vault") is expanded to the user's home direct…
- `progress` (string): Appended to progress. Must contain a "## YYYY-MM-DD" date header.
- `project` (string): Project name. If omitted, auto-discovered from workspace_root or the last used project; the last used project is refused when any field overwrites.
- `search_parent_dirs` (boolean): If true, also look for .sync82.json in parent directories above workspace_root (useful in monorepos, where the marker file lives at the repo root). Defaults to false — only workspace_root itself is c…
- `stack` (string): Overwrites stack with the full updated content.
- `subproject` (string): Subproject name.
- `workspace_root` (string): Path to your project folder, used to auto-discover the project via .sync82.json.

### `write_memory` (~303 tokens)

Overwrite a memory file's entire content. Destructive: for append-only kinds (progress, decisions, or a custom kind created with append_memory), this replaces every non-archived entry, not just the latest one — use append_memory to add without losing prior entries. Archived entries are kept. The project must be given via project or workspace_root, not taken from the last session.

Input parameters:

- `content` (string, required): The new full content.
- `filename` (string, required): The file/kind to overwrite (e.g. "memory", "progress", or a custom name).
- `path` (string): Base path where the memory is stored. If left blank, uses the default vault path. A leading "~", "HOME" or "$HOME" (e.g. "~/vaults/work.db", "HOME/custom-vault") is expanded to the user's home direct…
- `project` (string): Project name. If omitted, auto-discovered from workspace_root; unlike other tools, the last used project is refused.
- `search_parent_dirs` (boolean): If true, also look for .sync82.json in parent directories above workspace_root (useful in monorepos, where the marker file lives at the repo root). Defaults to false — only workspace_root itself is c…
- `subproject` (string): Subproject name.
- `workspace_root` (string): Path to your project folder, used to auto-discover the project via .sync82.json.

## Diagnostics

Captured diagnostic sections: Provenance. The full working is on the page: https://verifymcp.io/servers/oito2-mcp-sync82/sync82#diagnostics

## Score history

- 2026-10-17: 51
- 2026-10-16: 51
- 2026-10-15: 51
- 2026-10-14: 51
- 2026-10-13: 19
- 2026-10-12: 19
- 2026-10-10: 19
- 2026-10-07: 19

## Common questions

### What is the sync82 MCP server?

sync82 is an MCP server listed in the public MCP registry as io.github.oito2/mcp-sync82. Persistent, structured project memory for AI coding agents, stored locally in SQLite. This page covers its MCPB bundle (https://github.com/oito2/mcp-sync82/releases/download/v1.3.0/sync82.mcpb).

### Is the sync82 MCP server safe to use?

sync82 scores 51 out of 100 on VerifyMCP. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the sync82 MCP server expose?

sync82 exposes 19 tools: append_memory, archive_memory, check_project_health, create_project, delete_memory, and 14 more. Their descriptions and schemas cost roughly 7,787 tokens of context every time the server is loaded.

### What licence is the sync82 MCP server under?

sync82 declares the GPL-3.0-or-later licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- Repository: https://github.com/oito2/mcp-sync82
- Changelog RSS feed: https://verifymcp.io/servers/oito2-mcp-sync82/sync82.xml
- Changelog JSON feed: https://verifymcp.io/servers/oito2-mcp-sync82/sync82.json
- HTML version of this page: https://verifymcp.io/servers/oito2-mcp-sync82/sync82
