From c7087016ae31e657d3fbd0335c2ba13327379935 Mon Sep 17 00:00:00 2001 From: showxu <10173746+showxu@users.noreply.github.com> Date: Thu, 1 Oct 2026 02:03:49 +0800 Subject: [PATCH] Apply the canonical Computer MCP family presentation --- .github/brand/social.png | Bin 0 -> 26152 bytes .github/workflows/validate.yml | 1 + AGENTS.md | 8 ++++++++ Documentation/Brand/header.svg | 13 +++++++++++++ README.md | 7 ++++++- Scripts/check-brand.py | 31 +++++++++++++++++++++++++++++++ brand.lock.json | 16 ++++++++++++++++ 7 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 .github/brand/social.png create mode 100644 Documentation/Brand/header.svg create mode 100644 Scripts/check-brand.py create mode 100644 brand.lock.json diff --git a/.github/brand/social.png b/.github/brand/social.png new file mode 100644 index 0000000000000000000000000000000000000000..ca27666f9499a8799e87ae8f1fd7f19ceb320df3 GIT binary patch literal 26152 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 U)qEJ-*z<=Q*KDt1F1tPY2e__-HUIzs literal 0 HcmV?d00001 diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 72f8882..ee76bf5 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -23,6 +23,7 @@ jobs: with: python-version: ${{ matrix.python-version }} - run: | + python3 Scripts/check-brand.py python3 -m unittest discover -s Tests -p 'test_*.py' python3 Scripts/build_package.py dist > package-receipt.json - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 diff --git a/AGENTS.md b/AGENTS.md index 2e0c234..9db22b0 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -11,3 +11,11 @@ Keep vendor installation, authentication, subscription usage, and updates outsid Use Python standard library only unless a dependency demonstrably removes required complexity. Tests must cover MCP initialization, tool discovery, ACP framing, permission response, deterministic package contents, and executable archive mode. Before handoff run the unit tests, native non-model interface check, deterministic package build, Computer MCP package validation/doctor where available, and git status. Do not publish or create a release implicitly. + +## Brand delivery + +The main Computer MCP repository owns ProductIdentity and BRAND. Imported +`Documentation/Brand/header.svg` travels with the packaged manual; +`.github/brand/social.png` supplies the repository preview. `brand.lock.json` +binds both to canonical exports. Run `python3 Scripts/check-brand.py` locally +and in CI. Update imports with the main repository's `Scripts/brand.py sync`. diff --git a/Documentation/Brand/header.svg b/Documentation/Brand/header.svg new file mode 100644 index 0000000..02cfab9 --- /dev/null +++ b/Documentation/Brand/header.svg @@ -0,0 +1,13 @@ + + Computer MCP — Cursor + + + + + First-party plugin + Computer MCP + Cursor + + Cursor Agent CLI and ACP integration + + diff --git a/README.md b/README.md index 9d071d8..3e7120b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,9 @@ -# Cursor Plugin +![Computer MCP — Cursor](Documentation/Brand/header.svg) + +# Computer MCP — Cursor + +Part of the [Computer MCP](https://computer-mcp.github.io/) family. +**Let ChatGPT use your local tools.** An independent Computer MCP plugin for Cursor. The same package contributes a canonical CLI Tree, a stdio MCP adapter and client-neutral usage Skills. It does not link Computer MCP Core or require a host release to add vendor behavior. diff --git a/Scripts/check-brand.py b/Scripts/check-brand.py new file mode 100644 index 0000000..1cb6c74 --- /dev/null +++ b/Scripts/check-brand.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python3 +"""Verify a repository's locked Computer MCP brand delivery without a source checkout.""" + +import hashlib +import json +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +LOCK = ROOT / "brand.lock.json" +if not LOCK.exists(): + LOCK = ROOT / "public/brand/brand.lock.json" +record = json.loads(LOCK.read_text()) +assert record["schema_version"] == 1, "Unsupported brand lock" +assert record["source"] == "https://github.com/computer-mcp/computer-mcp", "Unexpected brand authority" +for name, expected in record["files"].items(): + path = ROOT / name + assert path.resolve().is_relative_to(ROOT), f"Invalid delivery path: {name}" + assert hashlib.sha256(path.read_bytes()).hexdigest() == expected, f"Brand delivery drift: {name}" +if record["consumer"] == "computer-mcp.github.io": + text = (ROOT / "index.html").read_text() + for promise in record["promise"].values(): + assert promise in text, "Website promise differs from the imported brand" + assert 'brand/social-en.png' in text, "Website sharing artwork differs" +else: + manual = ROOT / ("profile/README.md" if record["consumer"] == ".github" else "README.md") + text = manual.read_text() + assert record["name"] in text, "Master name missing from public entry point" + assert record["promise"]["en"] in text, "Master promise missing from public entry point" + header = "brand/header.svg" if record["consumer"] == ".github" else "Documentation/Brand/header.svg" + assert header in text, "Family header missing from public entry point" +print(f"Locked Computer MCP brand verified for {record['consumer']}") diff --git a/brand.lock.json b/brand.lock.json new file mode 100644 index 0000000..e914a18 --- /dev/null +++ b/brand.lock.json @@ -0,0 +1,16 @@ +{ + "schema_version": 1, + "source": "https://github.com/computer-mcp/computer-mcp", + "revision": "3c498108b1b847ae126fd2593cd0d3ddb4d0d9858d0dae214b1439ff69226e50", + "consumer": "plugin-cursor", + "name": "Computer MCP", + "promise": { + "en": "Let ChatGPT use your local tools.", + "zh-CN": "\u8ba9 ChatGPT\uff0c\u7528\u4e0a\u4f60\u7684\u672c\u673a\u5de5\u5177\u3002" + }, + "files": { + "Documentation/Brand/header.svg": "3eb525deef20b9797cecb4021033bca30a680bb1379762b17365903bfe70f58d", + ".github/brand/social.png": "56bfb7ef7421894501b6c12e956bdd3c30f766b13b6722c394a1e56083d59ae6", + "Scripts/check-brand.py": "2ec3c64469774b48fbfa6fbfa7f6a35c6a172fe4de347beb1881766632fbfdde" + } +}