Server data from the Official MCP Registry
Local copy-first Apple Notes recovery and review MCP server for NoteStore Lab case roots.
Local copy-first Apple Notes recovery and review MCP server for NoteStore Lab case roots.
Valid MCP server (1 strong, 2 medium validity signals). 1 code issue detected. No known CVEs in dependencies. Package registry verified. Imported from the Official MCP Registry. 1 finding(s) downgraded by scanner intelligence.
5 files analyzed · 2 issues found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Add this to your MCP configuration file:
{
"mcpServers": {
"io-github-xiaojiou176-open-notestorelab-mcp": {
"args": [
"apple-notes-forensics"
],
"command": "uvx"
}
}
}From the project's GitHub README.
apple-notes-forensics is the repository. NoteStore Lab is the public
product name for the same copy-first Apple Notes recovery lab.
Copy first. Prove the case path. Then let AI and local MCP review the same case root.
Short copy-first path:
notes-recovery demo->notes-recovery doctorRepository identity:
apple-notes-forensics· Primary entrypoints:notes-recoveryandnotes-recovery-mcp
Start Here · Public Proof · Landing · Use Cases · Builder Guide · Support

Public-safe proof block: one copied-evidence workflow, one timestamped case root, and reviewable outputs for backup, recovery, verification, and reports.
If you want the shortest truthful filter before reading deeper, use this table:
| What you need to know | Current answer |
|---|---|
| Product thesis | a copy-first local Apple Notes recovery and review lab for macOS |
| First success | notes-recovery demo -> notes-recovery doctor |
| First proof | one timestamped synthetic case root plus a zero-risk host readiness check |
| Builder lane later | notes-recovery-mcp and INTEGRATIONS.md after the operator path already makes sense |
| What it must never be reduced to | a hosted recovery portal, generic AI assistant, or multi-tenant review service |
Treat this repository like a lab bench, not a rescue button. Start by proving the workflow shape on synthetic artifacts first:
notes-recovery demo
notes-recovery doctor
What this short path proves in under five minutes:
If you want the second-ring synthetic review lane after that, continue with:
notes-recovery ai-review --demo
notes-recovery ask-case --demo --question "What should I inspect first?"
That second ring proves bounded AI review and evidence-backed case questioning on the same synthetic case root.
If you are here for Codex / Claude Code integration, run the operator path once, then jump to the Builder Guide. The builder lane is real, but it is not the first thing a new operator should read.
Open the right next door after that first pass:
| If you want to... | Open this next | Why |
|---|---|---|
| see the copy-first story and proof-path overview | Landing | this is the shortest product overview for a first-time visitor |
| separate repo proof from manual or platform tails | Public Proof | this is where "what is proved" and "what is still manual" are split cleanly |
| match your goal to the right workflow lane | Use Cases | it sorts operator, AI review, MCP, and case-diff jobs without mixing them |
| reuse the same case root in Codex / Claude Code | Builder Guide | builder reuse is real, but it still comes after the operator path |
notes-recovery-mcp as the repo's pure_mcp review
surfacepublic-skills/notestorelab-case-review/ as the standalone
pure_skills packet for host-native reviewers; its secondary ClawHub packet
listing is live, but it still stays behind the landing/proof routeDeep reads once the first path makes sense: LLMs Guide · Distribution · Use Cases · Ecosystem Fit
NoteStore Lab is a local Apple Notes recovery toolkit for macOS. It is built around one rule: work on copied evidence, not the live Notes store.
The CLI-first chain stays intentionally simple:
notes-recovery CLI -> parser/handlers -> services -> core pipeline -> timestamped case outputs
The builder-facing chain is just as important:
case root + manifests + review artifacts + notes-recovery-mcp
That is the current external substrate for local agents and builder tooling. It is real today. A hosted API or generated SDK is not.
For the exact repo-side proof, remote read-back proof, and manual external boundary, use Public Proof.
| This repository is for | This repository is not for |
|---|---|
| Apple Notes incidents on macOS | A cloud service |
| Copy-first local recovery and forensic review | A Notes replacement app |
| Operators who want manifests, reports, and reviewable outputs | A cross-platform recovery library |
| Teams who prefer inspectable steps over ad hoc edits | A guarantee that every deleted-data case is recoverable |
This repository is not a generic AI assistant. It is closer to a forensic workbench with a bounded AI copilot layered on top.
The highest-value AI / agent cuts already shipped are:
| Surface | Current role in the workflow | Why it matters |
|---|---|---|
notes-recovery ai-review | evidence summarizer and triage assistant | turns one case root into findings, next questions, and operator priorities |
notes-recovery ask-case | operator next-step assistant | answers one bounded question from derived artifacts and cites the evidence |
notes-recovery case-diff | replay / compare diagnosis substrate | compares two case roots at the manifest and review-surface layer |
notes-recovery-mcp | local agent access surface | lets Codex / Claude Code style local agent workflows consume case roots safely |
These surfaces live on the main workflow. They are not detached chat panels.
| Proof | Command | What it proves |
|---|---|---|
| Public-safe workflow shape | notes-recovery demo | the repo already ships a zero-risk synthetic case surface |
| AI review layer | notes-recovery ai-review --demo | AI exists as a review assistant on derived artifacts |
| Evidence-backed case Q&A | notes-recovery ask-case --demo --question "What should I inspect first?" | case questioning is real and cites review-safe sources |
| Agent protocol surface | notes-recovery-mcp --case-dir <case-root> | MCP access exists as a local stdio-first case-root interface |
| Compare / replay substrate | notes-recovery case-diff --dir-a <case-root> --dir-b <case-root> | the repo can compare two case roots without diffing raw copied evidence |
| Optional plugin contract | notes-recovery plugins-validate --config <plugins.json> | optional tool integrations are validated before you trust them, including host-safety screening |
ai-review and ask-case stay on derived artifacts first, and cloud-backed OpenAI remains explicit opt-in.notes-recovery-mcp is local stdio first, read-only / read-mostly, and case-root-centric instead of host-control by default.This repository is a copied-evidence workbench, not a host-control utility.
That means the tracked code and automation must not introduce:
killall, pkill, kill -9,
os.kill(...), or process.kill(...)osascript, System Events,
AppleEvent, loginwindow, or Force Quit flowsThe allowed local scope stays intentionally narrow:
.venv/ and .runtime-cache/| If you want to... | Start here | Why |
|---|---|---|
| get a zero-risk first look | notes-recovery demo | it shows the public-safe demo surface without touching private evidence or a live Notes store |
| preview AI-assisted review on synthetic data | notes-recovery ai-review --demo | it generates triage, findings, and next-step questions from public-safe demo artifacts |
| ask one evidence-backed question about the synthetic review surface | notes-recovery ask-case --demo --question "What should I inspect first?" | it answers from tracked derived demo artifacts and cites which surfaces it used |
| check whether this host is ready for a real copied-evidence run | notes-recovery doctor | it confirms the host boundary and tells you whether to stay on demo or move to a real copied-evidence run |
| browse a richer local review cockpit | forensics-dashboard | it gives you case-root selection, resource inventory, AI quick view, and bounded case-diff without becoming a hosted portal |
| run the standard copied-evidence workflow | notes-recovery auto --out ... --report --verify --recover --keyword ... | it builds one timestamped case root with recovery, review, and manifest outputs |
| share a safer review bundle later | notes-recovery public-safe-export --dir <case-root> --out ./output/public_safe_bundle | it creates a redacted sharing layer instead of exposing the forensic-local case root |
Start with the tracked public demo before you point the toolkit at any copied evidence of your own:
python -m venv .venv
source .venv/bin/activate
python -m pip install -e .[dev]
notes-recovery demo
notes-recovery ai-review --demo
notes-recovery ask-case --demo --question "What should I inspect first?"
notes-recovery doctor
notes-recovery --help
Expected first-look signals:
NoteStore Lab public demonotes-recovery ai-review --demo generates a synthetic triage summary,
findings, and next-step questionsnotes-recovery ask-case --demo ... returns an evidence-backed answer with
cited derived surfacesnotes-recovery doctor tells you whether the host is ready for a real
copied-evidence runOnly do this on a copy of Apple Notes data, never the live original store.
Before the first real copied-evidence run, start with:
notes-recovery doctor
That preflight step helps you decide whether this host is ready for the
standard copied-evidence workflow, whether you should stay on demo, or
whether you only need to install optional extras.
If you want AI-assisted review on a real case, keep the boundary clear:
python -m pip install -e .[ai]
notes-recovery ai-review \
--dir ./output/Notes_Forensics_<run_ts> \
--provider ollama \
--model llama3.1:8b
The AI assistant reads review artifacts such as manifests, pipeline summaries, verification outputs, timelines, reports, and review indexes. It does not default to uploading raw copied evidence or the live Notes store to a cloud provider.
If you want to ask one bounded, evidence-backed question about the same case, use:
notes-recovery ask-case \
--dir ./output/Notes_Forensics_<run_ts> \
--question "Which artifact should I inspect first?"
That command stays on derived case artifacts and returns:
If you want a richer local review surface after the CLI proof path, install the optional dashboard extras and launch the review cockpit:
python -m pip install -e .[dashboard]
forensics-dashboard
The review cockpit stays local-first and case-root-centric. It can browse
multiple case roots, preview the review index and AI outputs, inventory derived
resources, and render a bounded case-diff summary without turning the repo
into a hosted review portal.
notes-recovery auto \
--out ./output/Notes_Forensics \
--report \
--verify \
--recover \
--keyword "your distinctive keyword"
That workflow:
review_index.md guide into that case directoryYou can also run stages individually with commands such as snapshot, query,
recover, verify, report, plugins-validate, case-diff, and fts-index.
notes-recovery ai-review is the first AI surface in this repository.
triage_summary.mdtop_findings.mdnext_questions.mdartifact_priority.jsonnotes-recovery ai-review --demopython -m pip install -e .[ai]notes-recovery ai-review --dir <case-root> --provider ollama --model <model>NOTES_AI_OPENAI_API_KEYnotes-recovery ai-review --dir <case-root> --provider openai --model <model> --allow-cloudThe stable case-root contract for those directories and manifests is documented in CONTRIBUTING.md.
Round 4 adds the first protocol-facing surfaces for agents and external tools:
notes-recovery ask-case --dir <case-root> --question "..."notes-recovery-mcp --case-dir <case-root>Those protocol surfaces keep the same product boundary:
stdio transport instead of a hosted serviceThe current builder story is intentionally narrow and stable:
Treat this whole section as a later builder lane around the local lab. It is real and useful, but it is not the front-door sentence a new reviewer should use to describe the product.
notes-recovery-mcp when you want a case-root-centric tool/resource
interface instead of scraping files ad hocIf your local coding-agent host supports stdio MCP servers, the stable command to register is:
.venv/bin/python -m notes_recovery.mcp.server --case-dir ./output/Notes_Forensics_<run_ts>
Use that command inside Codex / Claude Code style local MCP registration flows. The host-specific JSON wrapper can vary, but the executable contract is the same: local stdio, read-mostly, case-root-centric.
If you want copy-paste-safe wrapper sketches, the builder guide and shipped distribution artifacts now include:
.codex/config.toml starter for Codex.mcp.json wrapper example for Claude CodeThose public-ready surfaces live under plugins/, .claude-plugin/, and
server.json. Package the installable archives with:
.venv/bin/python scripts/release/build_distribution_bundles.py --out-dir ./dist
For the MCP lane specifically, server.json is the repo-owned descriptor
around the same local stdio case-review workflow. Package publication,
registry read-back, and marketplace/manual submission status can drift over
time, so this README keeps the primary story on the local bench first. Use
DISTRIBUTION.md when you need the later-lane claim
boundary.
The repository now also ships a canonical independent skill surface at
skills/notestorelab-case-review/. Treat that directory as the SSOT skill
package, and treat the plugin/starter skill files as host-specific derived
copies. That makes the skill independently referenceable without pretending it
has already cleared any external directory gate.
For OpenHands/extensions and ClawHub-style submissions, the repo now also ships
an OpenHands/extensions-friendly public skill folder at
public-skills/notestorelab-case-review/. Treat that packet as the
portable listing lane, while skills/notestorelab-case-review/ remains the
canonical skill text.
When you want the repo-side metadata/build-readiness gate before the next PyPI version bump, run:
.venv/bin/python scripts/release/check_pypi_publish_readiness.py
Practical host notes:
demo -> ask-case --demo -> the exact notes_recovery.mcp.server command.Current integration fit:
public-skills/notestorelab-case-review/Builder-facing status today:
| Surface | Status | What to use today |
|---|---|---|
| HTTP API | not shipped | use CLI + case roots + MCP |
| OpenAPI contract | not shipped | use documented case-root artifacts and MCP tool/resource names |
| shared generated client | not shipped | use the local MCP surface or parse manifests directly |
| thin SDK | not shipped | future path only, after the shared case/MCP contract is locked |
| repo-owned host bundles | companion packaging | use plugins/, .claude-plugin/, server.json, and scripts/release/build_distribution_bundles.py after the local MCP story is already clear |
| canonical independent skill surface | secondary current lane | use skills/notestorelab-case-review/ as the only SSOT skill surface; plugin/starter copies are derived packaging |
| OpenHands/extensions-friendly public skill folder | portable secondary packet | use public-skills/notestorelab-case-review/ for OpenHands/extensions or ClawHub-style skill submissions without turning it into the repo's main front door |
| official marketplace/catalog listing | Wave 2 external validation | repo-owned artifacts do not imply official listing or publish read-back |
The Docker story is intentionally narrow and secondary:
stdioBuild the image:
docker build -t notestorelab:0.1.0.post1 .
Run the public-safe demo:
docker run --rm notestorelab:0.1.0.post1 notes-recovery demo
Run the MCP help surface:
docker run --rm --entrypoint notes-recovery-mcp notestorelab:0.1.0.post1 --help
Review an existing copied case root through the local stdio MCP server:
docker run --rm -i \
-v "$PWD/output:/cases:ro" \
--entrypoint notes-recovery-mcp \
notestorelab:0.1.0.post1 \
--case-dir /cases/Notes_Forensics_<run_ts>
The container image is a reproducible local runtime, not a hosted portal, not an API gateway, and not proof of any live Glama or OCI catalog listing.
The repo-side Glama metadata surface is now explicit as well:
glama.jsonDockerfileghcr.io/xiaojiou176-open/apple-notes-forensics:0.1.0.post1That is enough to prepare a Glama Add Server submission or a Docker-first catalog conversation. It is still not proof of a live Glama listing until fresh Glama-side read-back exists.
Use the dedicated builder notes in INTEGRATIONS.md and the ecosystem binding matrix in ECOSYSTEM.md before you describe the repo as an integration substrate. Use DISTRIBUTION.md when you need the exact claim boundary for Codex, Claude Code, OpenClaw, and the MCP Registry.
This repository now ships a small repo-native cleanup lane for local release and
rewrite residue. Use it when you want to reclaim repo-local staging artifacts
without touching copied evidence, output/, Docker state, browser profiles, or
shared machine caches.
python scripts/ops/clean_support_state.py --dry-run
python scripts/ops/clean_support_state.py --apply
Current cleanup classes include:
.runtime-cache/pypi-release.runtime-cache/history-rewrite-*.runtime-cache/release.runtime-cache/pypi-publish-attempt-*.runtime-cache/lighthouse-pages*.runtime-cache/security-audit.runtime-cache/temp.runtime-cache/dist-bundles.runtime-cache/*starter*.zip.runtime-cache/verify-*.runtime-cache/gitleaks-*.jsonTreat this as a maintainer-only lane. It is for support residue, not for copied evidence or public proof assets.
Two previously parked operator utilities are now first-class repo-side surfaces:
notes-recovery plugins-validate --config <plugins.json>
notes-recovery case-diff --dir-a <case-root> --dir-b <case-root>
The GitHub repository page and the root-level contract files are the current public truth for this project.
Use DISTRIBUTION.md as the later-lane ledger for package, registry, plugin,
Docker, and Glama details. Those surfaces are real, but they should not replace
the copy-first local lab story in the first paragraph a reviewer reads.
Right now:
llms.txt, robots.txt, and sitemap.xml now expose the current public contract to AI crawlers and search engines without pretending the repo is an API platformUse CHANGELOG.md for tracked milestone history and the Releases page for the published GitHub release feed and the synthetic public demo bundle.
The current repo-owned public contract is:
llms.txt, robots.txt, and sitemap.xml are repo-owned public contract
files, not platform-acceptance receiptsllms.txt is now the fastest AI-crawler / agent-reader entrypoint for the current shipped public contractopen_graph_image_url read-back before you claim a custom card is liveThe root-level public contract for this repository is intentionally narrow:
The repository keeps a narrow baseline smoke contract that matches the hosted baseline lane, not the entire CI matrix. The canonical baseline smoke and full suite commands live in CONTRIBUTING.md so the public front door stays brief while the detailed verification contract stays in one place.
That baseline smoke proves:
.[dev] pipeline surface runs on macOS in CITracked public proof should come from one of two places only:
notes_recovery/resources/demo/notes-recovery public-safe-exportPublic release readiness is not just about the current working tree. The
repository audit explicitly reviews git history, pull request diffs, forks,
mirrors, downloaded clones, branch protection, required pull request reviews,
secret scanning, and hosting settings for the xiaojiou176-open canonical
repository.
Use scripts/ci/check_release_readiness.py --strict instead of assuming those
open-source boundary checks are still current from memory.
This public front door is relocation-safe at the repo level, but it is not environment-agnostic at the host level because the supported workflow still assumes macOS and copied Apple Notes evidence.
Treat the root-level files as the active repository contract and the repository root as the stable control surface for commands, review notes, and public-safe demo artifacts.
Tracked runtime artifacts do not belong in the public tree. examples/ is intentionally excluded, and .runtime-cache/ remains a reserved, non-public staging area for local support work instead of published proof.
The local .venv/ directory is a repo-local rebuildable developer surface.
Treat it like a reusable tool belt, not like source or forensic evidence:
Repo-local rebuildable tooling follows the same boundary:
.venv/ is a local support surface, not repository truth.venv/ is a safe local maintenance action when you intend to
recreate the development environmentpython -m venv .venv plus python -m pip install -e .[dev]Optional surfaces remain opt-in:
.[ai] for local AI-assisted review via Ollama
or explicit cloud opt-in via OpenAI.[mcp] for the local read-mostly MCP server.[dashboard] for the Streamlit review cockpit, case-root selection, and bounded case-diff view.[carve] for deeper payload carving supportDo not assume one mixed environment is the canonical developer contract.
Install them explicitly when you need those extras:
python -m pip install -e .[ai]
python -m pip install -e .[mcp]
python -m pip install -e .[dashboard]
python -m pip install -e .[carve]
If you want the richer local review cockpit for one case root:
python -m pip install -e .[dashboard]
forensics-dashboard
The dashboard and carve surfaces stay visible, but they are not part of the
default baseline guarantee.
AI review is also boundary-aware:
notes-recovery ai-review --demo works on tracked synthetic review artifactsnotes-recovery ask-case --demo ... stays on tracked synthetic review artifactsask-case cites derived artifacts instead of returning an unsupported freeform answer--allow-cloudThe MCP surface is also boundary-aware:
notes-recovery-mcp starts with local stdio transportSome workflows also rely on opt-in integrations such as docker,
sqlite_dissect, strings, and binwalk. Those remain optional local tools,
not part of the default baseline guarantee.
For deeper changes, use the broader full suite engineering sweep documented in CONTRIBUTING.md. That full suite signal remains useful engineering coverage, but it is not the default baseline CI guarantee.
Use notes-recovery public-safe-export --dir <case-root> --out ./output/public_safe_bundle
when you need a shareable review bundle from an existing case root. The export
is intentionally metadata-focused:
Star this repository if you want a copy-first Apple Notes recovery workflow with reviewable case outputs, a public-safe demo, and a tighter trust surface than an ad hoc “open the SQLite file and hope” approach.
Be the first to review this server!
by Modelcontextprotocol · Developer Tools
Read, search, and manipulate Git repositories programmatically
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.
by Microsoft · Content & Media
Convert files (PDF, Word, Excel, images, audio) to Markdown for LLM consumption
by mcp-marketplace · Developer Tools
Scaffold, build, and publish TypeScript MCP servers to npm — conversationally
by mcp-marketplace · Finance
Free stock data and market news for any MCP-compatible AI assistant.