Skip to content

Commit 967d17b

Browse files
authored
[codex] close pure-mcp descriptor ambiguity with signed replay (#26)
* docs: close pure-mcp descriptor ambiguity (cherry picked from commit 260d845) * fix: remove duplicate server.json key (cherry picked from commit 8ef67d7)
1 parent 45bdde0 commit 967d17b

23 files changed

Lines changed: 436 additions & 50 deletions

DISTRIBUTION.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ shipped yet.
2323
| :-- | :-- | :-- |
2424
| Source install from this repository | Ready | The repository ships Python package metadata and console entrypoints such as `movi-organizer`, `movi-web-api`, and `movi-mcp`. |
2525
| Movi MCP v1 stdio server | Ready | The MCP surface is a local-first stdio integration that can be launched from this repository or an installed environment. |
26+
| Pure-MCP registry descriptor | Submission-ready-unlisted | Root [`server.json`](./server.json) names the canonical MCP surface without claiming a live registry publication. |
2627
| Codex / Claude Code setup docs | Ready | The repository ships setup pages for Codex and Claude Code, but those docs describe local wiring, not a separate public distribution channel. |
2728
| Skills / agent bundle shelf | Submission-ready-unlisted | The repository now ships repo-owned skill bundle examples and install/proof notes without claiming a live skills registry listing. |
2829
| OpenClaw / ClawHub bundle | Submission-ready-unlisted | The repository now ships an OpenClaw-facing bundle and proof note without claiming a live catalog entry. |
@@ -46,7 +47,8 @@ Use the surfaces above in this order:
4647
2. GitHub Releases for release history
4748
3. GitHub Pages for the current public landing route
4849
4. `manifest.yaml` for the repo-owned submission summary
49-
5. `examples/skills/README.md` and `examples/openclaw/README.md` for unlisted bundle surfaces
50+
5. `server.json` for the canonical pure-MCP descriptor
51+
6. `examples/skills/README.md` and `examples/openclaw/README.md` for unlisted bundle surfaces
5052

5153
If you need to answer a stricter question such as "is the current head verified
5254
as a published release," do not infer that from a tag alone. Use the release

README.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
Movi is a review-first local file organizer and workbench for messy photos, screenshots, documents, and audio. It lets AI assist with the manifest first, then lets you inspect, label, and approve the plan before deterministic `apply` or `rollback` touches your files.
44

5-
[Safe First Look](#safe-first-look) · [10-Second Tour](#10-second-tour) · [Good Fit / Not A Fit](#good-fit--not-a-fit) · [Public Proof](docs/public_proof.md) · [Docs](docs/index.md) · [Distribution](DISTRIBUTION.md) · [Integrations](INTEGRATIONS.md) · [Submission Manifest](manifest.yaml) · [Skills Bundle](examples/skills/README.md) · [OpenClaw Bundle](examples/openclaw/README.md) · [Browser Surface](#browser-surface) · [Releases](https://github.com/xiaojiou176-open/movi-organizer/releases) · [Discussions](https://github.com/xiaojiou176-open/movi-organizer/discussions) · [Security](SECURITY.md) · [Movi MCP v1](docs/mcp.md) · [Codex Integration](docs/codex_mcp.md) · [Claude Code Integration](docs/claude_code_mcp.md) · [Developer Guide](docs/developer_guide.md)
5+
[Safe First Look](#safe-first-look) · [10-Second Tour](#10-second-tour) · [Good Fit / Not A Fit](#good-fit--not-a-fit) · [Public Proof](docs/public_proof.md) · [Docs](docs/index.md) · [Distribution](DISTRIBUTION.md) · [Integrations](INTEGRATIONS.md) · [Submission Manifest](manifest.yaml) · [MCP Descriptor](server.json) · [Review-First Skill Packet](examples/skills/README.md) · [OpenClaw Bundle](examples/openclaw/README.md) · [Browser Surface](#browser-surface) · [Releases](https://github.com/xiaojiou176-open/movi-organizer/releases) · [Discussions](https://github.com/xiaojiou176-open/movi-organizer/discussions) · [Security](SECURITY.md) · [Movi MCP v1](docs/mcp.md) · [Codex Integration](docs/codex_mcp.md) · [Claude Code Integration](docs/claude_code_mcp.md) · [Developer Guide](docs/developer_guide.md)
66

77
![Movi overview showing mixed files flowing into manifest review and organized output](docs/assets/storefront/hero-movi-overview.svg)
88

@@ -12,6 +12,17 @@ Public maintenance posture: limited-maintenance open source.
1212

1313
Current proof posture: reproducible smoke-tier evidence with a live release trail, Pages front door, and repo-side safety gates. It is not broad benchmark-grade proof yet, but the current front door already clears a truthful public-entry bar, and the proof routes stay explicit in [Public Proof](docs/public_proof.md) instead of being buried in operator-only docs.
1414

15+
## Canonical Public Roots
16+
17+
Read Movi like a workshop with one front desk and several labeled shelves:
18+
19+
- **Canonical public root:** this root [`README.md`](./README.md) plus the root [`manifest.yaml`](./manifest.yaml)
20+
- **Canonical pure-MCP registry descriptor:** [`server.json`](./server.json)
21+
- **Current pure-skills packet:** [`examples/skills/`](./examples/skills/)
22+
- **Host-specific supporting bundle:** [`examples/openclaw/`](./examples/openclaw/)
23+
- **Pure-MCP support surface:** [`docs/mcp.md`](./docs/mcp.md)
24+
- **Pure-MCP runtime implementation guide:** [`apps/mcp/README.md`](./apps/mcp/README.md)
25+
1526
## Why Movi Exists
1627

1728
Cleaning up a mixed folder usually fails for one of two reasons: either the tool is too manual, or the AI is allowed to move files before you can inspect the plan.

apps/mcp/README.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# apps/mcp
2+
3+
`apps/mcp` is the runtime implementation path for Movi MCP v1.
4+
5+
The canonical public root for the product still lives at the repo root
6+
(`README.md` + `manifest.yaml`), and the canonical machine-readable descriptor
7+
for the pure-MCP lane now lives at `../../server.json`.
8+
9+
Use the surfaces in this order when you need truthful MCP context:
10+
11+
1. `../../README.md`
12+
- canonical public storefront and overall product truth
13+
2. `../../server.json`
14+
- canonical machine-readable MCP descriptor for the repo
15+
3. `../../docs/mcp.md`
16+
- public MCP support surface, install path, and safety boundary
17+
4. `apps/mcp/*`
18+
- implementation files for the local stdio facade
19+
20+
In plain language: this directory is the machine room, not the store window.
21+
It explains where the MCP runtime is implemented, but it must not pretend to be
22+
the repo storefront or a live registry listing.
23+
24+
## What lives here
25+
26+
- `server.py`
27+
- FastMCP entrypoint and tool/resource registration
28+
- `service.py`
29+
- thin facade over the review-first Movi workflow
30+
- `__main__.py`
31+
- package entrypoint for local execution
32+
33+
## Truth boundary
34+
35+
- this directory does not claim a live registry listing
36+
- this directory does not replace `docs/mcp.md` as the public MCP support note
37+
- this directory does not bypass the review-first -> dry-run -> execute contract

contracts/governance/public_readiness_policy.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ required_repo_surface_files:
1111
- DISTRIBUTION.md
1212
- INTEGRATIONS.md
1313
- manifest.yaml
14+
- server.json
1415
- SUPPORT.md
1516
- CODE_OF_CONDUCT.md
1617
- .github/CODEOWNERS
@@ -27,6 +28,7 @@ required_repo_surface_files:
2728
- docs/mcp.md
2829
- docs/developer_guide.md
2930
- docs/review_first_ai_file_organizer.md
31+
- apps/mcp/README.md
3032
- examples/skills/README.md
3133
- examples/skills/SKILL.md
3234
- examples/openclaw/README.md

contracts/governance/public_surface.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ version: 1
22
public_docs:
33
- README.md
44
- manifest.yaml
5+
- server.json
56
- AGENTS.md
67
- CLAUDE.md
78
- LICENSE
@@ -15,6 +16,7 @@ public_docs:
1516
- CODE_OF_CONDUCT.md
1617
- docs/usage.md
1718
- docs/architecture.md
19+
- apps/mcp/README.md
1820
- examples/skills/README.md
1921
- examples/openclaw/README.md
2022
public_doc_globs:

contracts/governance/root_allowlist.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ canonical_tracked_entries:
1818
- NOTICE
1919
- README.md
2020
- SECURITY.md
21+
- server.json
2122
- SUPPORT.md
2223
- THIRD_PARTY_NOTICES.md
2324
- apps
@@ -70,6 +71,7 @@ entry_purposes:
7071
NOTICE: public repository notice summary
7172
README.md: public repo entry document
7273
SECURITY.md: public security reporting policy
74+
server.json: canonical machine-readable MCP descriptor for the public pure-MCP lane
7375
SUPPORT.md: public support boundary
7476
THIRD_PARTY_NOTICES.md: third-party dependency and asset notices
7577
apps: repo entry applications

contracts/governance/root_change_control.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,10 @@ entries:
9696
owner: repo
9797
change_class: security
9898
approval_rule: architecture-review
99+
server.json:
100+
owner: repo
101+
change_class: public-doc
102+
approval_rule: architecture-review
99103
SUPPORT.md:
100104
owner: repo
101105
change_class: public-doc

docs/_generated/render_state.json

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,14 @@
5858
"block_id": null,
5959
"source_hashes": {
6060
"contracts/governance/done_signal_policy.yaml": "16e2fc2add45a68406d6a6077ed7b912fe2406905bf1ff68e967bceeda4bd83c",
61-
"contracts/governance/public_readiness_policy.yaml": "eacf27c9d50b2c4295abddecddc23c83f9302140cf82bbd26cd0070cf18ce835",
61+
"contracts/governance/public_readiness_policy.yaml": "fc5821ecc62249926ee5e282d114b63eb844d39e4ec408f8673a7bc162d5ad39",
6262
"contracts/governance/required_checks_policy.yaml": "51f9e8cb17df93c3912ae719a6ba95b74f2c666b6b11c79e1728f7002fb3e3b3",
6363
".github/workflows/ci.yml": "145d243beb087cd6a976d45e4455e0747ace3ee3ad9c77160b57fb17f75c63fe",
6464
".github/workflows/pre-commit.yml": "ed0082256d36108f1bdb3d6c66f6f9805295a4f7f738465b0092d0b3fe0199ed",
6565
".github/workflows/live-integration.yml": "87a1d413bc8d92d2103b5d4a6e19cfcb85fdb30e9e753b88a3267607a41d2b92",
6666
".github/workflows/mutation-manual.yml": "c892aa745b913f37a4662e51ecf0c2013dc32faecd1c97d4a59f2d1e808fb101"
6767
},
68-
"output_hash": "b87dbaba30da2a7478fb1870192748b312367579f91832025a2be12458f9ccba"
68+
"output_hash": "fa8b6fe93898b373d52e412d172e93daf7ff7ed50e4b3f29c0c89bb65b6de0c4"
6969
},
7070
{
7171
"id": "root-web-api-routes",
@@ -76,7 +76,7 @@
7676
"source_hashes": {
7777
"contracts/api/web_api.openapi.yaml": "c97830844b65fd8f76cd23688187ca8648835d787d1819045882dea01e1d7b64"
7878
},
79-
"output_hash": "c0edfeff801744050b9f8e0b7661f30a4ab0f6667c5d987e24ac7eb1ad56f869"
79+
"output_hash": "52a2f027fcd3223d465bdebc88a4dbe70231040cf05ade1c9d53a0f45caedfde"
8080
},
8181
{
8282
"id": "root-runtime-topology",
@@ -91,7 +91,7 @@
9191
"package.json": "4b9bfb8aac66c5c9101b56af866932d5a27a2b1b912b01439905155a09cd6827",
9292
".env.example": "32a60792624cd36eb5992b34d9c67c6e6e2a0971a45f3a48370f3b0b720b0aa8"
9393
},
94-
"output_hash": "c0edfeff801744050b9f8e0b7661f30a4ab0f6667c5d987e24ac7eb1ad56f869"
94+
"output_hash": "52a2f027fcd3223d465bdebc88a4dbe70231040cf05ade1c9d53a0f45caedfde"
9595
},
9696
{
9797
"id": "root-ci-governance-summary",
@@ -106,7 +106,7 @@
106106
"contracts/governance/required_checks_policy.yaml": "51f9e8cb17df93c3912ae719a6ba95b74f2c666b6b11c79e1728f7002fb3e3b3",
107107
"package.json": "4b9bfb8aac66c5c9101b56af866932d5a27a2b1b912b01439905155a09cd6827"
108108
},
109-
"output_hash": "c0edfeff801744050b9f8e0b7661f30a4ab0f6667c5d987e24ac7eb1ad56f869"
109+
"output_hash": "52a2f027fcd3223d465bdebc88a4dbe70231040cf05ade1c9d53a0f45caedfde"
110110
},
111111
{
112112
"id": "root-release-identity",
@@ -117,7 +117,7 @@
117117
"source_hashes": {
118118
"pyproject.toml": "d12c2c415c3900d81c888e91d3a8ec1af88af96a701c6de801c37a1e52b4a495"
119119
},
120-
"output_hash": "c0edfeff801744050b9f8e0b7661f30a4ab0f6667c5d987e24ac7eb1ad56f869"
120+
"output_hash": "52a2f027fcd3223d465bdebc88a4dbe70231040cf05ade1c9d53a0f45caedfde"
121121
},
122122
{
123123
"id": "script-readme-web-api-routes",
@@ -179,7 +179,7 @@
179179
"block_id": "script-readme-governance-truth",
180180
"source_hashes": {
181181
"contracts/governance/done_signal_policy.yaml": "16e2fc2add45a68406d6a6077ed7b912fe2406905bf1ff68e967bceeda4bd83c",
182-
"contracts/governance/public_readiness_policy.yaml": "eacf27c9d50b2c4295abddecddc23c83f9302140cf82bbd26cd0070cf18ce835",
182+
"contracts/governance/public_readiness_policy.yaml": "fc5821ecc62249926ee5e282d114b63eb844d39e4ec408f8673a7bc162d5ad39",
183183
"contracts/governance/required_checks_policy.yaml": "51f9e8cb17df93c3912ae719a6ba95b74f2c666b6b11c79e1728f7002fb3e3b3",
184184
".github/workflows/ci.yml": "145d243beb087cd6a976d45e4455e0747ace3ee3ad9c77160b57fb17f75c63fe",
185185
".github/workflows/pre-commit.yml": "ed0082256d36108f1bdb3d6c66f6f9805295a4f7f738465b0092d0b3fe0199ed",
@@ -222,7 +222,7 @@
222222
"block_id": "architecture-governance-truth",
223223
"source_hashes": {
224224
"contracts/governance/done_signal_policy.yaml": "16e2fc2add45a68406d6a6077ed7b912fe2406905bf1ff68e967bceeda4bd83c",
225-
"contracts/governance/public_readiness_policy.yaml": "eacf27c9d50b2c4295abddecddc23c83f9302140cf82bbd26cd0070cf18ce835",
225+
"contracts/governance/public_readiness_policy.yaml": "fc5821ecc62249926ee5e282d114b63eb844d39e4ec408f8673a7bc162d5ad39",
226226
"contracts/governance/required_checks_policy.yaml": "51f9e8cb17df93c3912ae719a6ba95b74f2c666b6b11c79e1728f7002fb3e3b3",
227227
".github/workflows/ci.yml": "145d243beb087cd6a976d45e4455e0747ace3ee3ad9c77160b57fb17f75c63fe",
228228
".github/workflows/pre-commit.yml": "ed0082256d36108f1bdb3d6c66f6f9805295a4f7f738465b0092d0b3fe0199ed",
@@ -239,7 +239,7 @@
239239
"block_id": "open-source-platform-truth",
240240
"source_hashes": {
241241
"contracts/governance/done_signal_policy.yaml": "16e2fc2add45a68406d6a6077ed7b912fe2406905bf1ff68e967bceeda4bd83c",
242-
"contracts/governance/public_readiness_policy.yaml": "eacf27c9d50b2c4295abddecddc23c83f9302140cf82bbd26cd0070cf18ce835",
242+
"contracts/governance/public_readiness_policy.yaml": "fc5821ecc62249926ee5e282d114b63eb844d39e4ec408f8673a7bc162d5ad39",
243243
"contracts/governance/required_checks_policy.yaml": "51f9e8cb17df93c3912ae719a6ba95b74f2c666b6b11c79e1728f7002fb3e3b3",
244244
".github/workflows/ci.yml": "145d243beb087cd6a976d45e4455e0747ace3ee3ad9c77160b57fb17f75c63fe",
245245
".github/workflows/pre-commit.yml": "ed0082256d36108f1bdb3d6c66f6f9805295a4f7f738465b0092d0b3fe0199ed",

docs/mcp.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ description: Local-first stdio MCP surface for Movi with review-safe tools, read
77

88
`Movi MCP v1` is the local-first stdio extension surface for Movi.
99

10+
The canonical public root still lives at the repo root (`README.md` +
11+
`manifest.yaml`), the canonical machine-readable descriptor now lives at
12+
`../server.json`, and `../apps/mcp/README.md` explains the runtime
13+
implementation path. This page explains the pure-MCP support surface; it does
14+
not mean the repo already ships a live registry listing.
15+
1016
In plain language: it gives an agent or automation client a supervised control window into the same workflow humans use in the app. It can inspect jobs, read reports, patch overlays, preview reusable rules, and queue dry-run-safe follow-up work, but it does not get a secret “move files now” shortcut.
1117

1218
## What V1 Is

docs/reference/governance_truth.generated.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
- **Repo public readiness gate**: `bash tooling/gates/public_readiness_gate.sh repo`
3030
- **Release public readiness gate**: `bash tooling/gates/public_readiness_gate.sh release`
3131
- **Platform alignment gate**: `bash tooling/gates/platform_alignment_gate.sh`
32-
- **Required repo surface files**: `28`
32+
- **Required repo surface files**: `30`
3333
- **Required package scripts**: `5`
3434
- **Release-mode requires tracked public files**: `yes`
3535
- **Release-mode requires public repo**: `yes`

0 commit comments

Comments
 (0)