From c5e42adac08da6168543e7bfd625167195b0b78f Mon Sep 17 00:00:00 2001 From: "Peter.Morton" Date: Sun, 22 Mar 2026 11:33:16 -0500 Subject: [PATCH] fix: correct manifest.json to pass MCPB validation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add required 'version' field (1.0.0) - Change 'author' from string to object with name/url - Move 'mcp_config' inside 'server' object - Fix 'user_config' to use proper field-level structure - Remove invalid 'compatibility' and 'capabilities' top-level fields - Create bundle icon (512x512 PNG) to satisfy icon requirement - Remove icon placeholder file Validation: ✅ mcpb validate passes with warnings only Tasks: T149 (icon), T158 (validate), T159 (build) marked complete Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- assets/icon.png | Bin 0 -> 3532 bytes assets/icon.png.placeholder | 12 ------ manifest.json | 55 +++++++++++-------------- package.json | 2 + specs/001-obsidian-mcp-bundle/tasks.md | 6 +-- 5 files changed, 28 insertions(+), 47 deletions(-) create mode 100644 assets/icon.png delete mode 100644 assets/icon.png.placeholder diff --git a/assets/icon.png b/assets/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a95c0bd8aec7793b34c5fdc6bb47ddcb2f2e0e14 GIT binary patch literal 3532 zcmeHKYgAKL7T)(J4FnCZC}PM6R1rqr&wzr7AY$ZUP%2gsqaqJMCJUqmt>mgys`9Ep zd59!!MX;bES_r7+q9`z+L45I&Tv0?RRFHy5Owzzwoi(eg^Kbri&741XuY1lt`+R$^ z`+eUz&I|CNX)&|_fW}?Fb`t=q4pGpYeH>(XT~NQz;jUd1lvF(W)Z^6IM|#KZ7f~;) zSx2wjWyLhWS}9kx_RXVjrf5G->OmS;hdbTBT3_}^9b3j{RH{y+JbDT3nphz_ip87yNzQTeAR zC$CKk=@zdZs7JR5dE66zU*>E0Dga&$2KMS1qwNR1i9M&BJazWz=YvKd{>w?uK5N~J~%4C#Z*Sl3k6Q~4W@Ehvp| zhVU0w2)!KeMlz=1Q8hEF_;QKG;rU~L5PI+8gcT~}T?B_D$p?XPg^KThr;xGIN+rD& z4(ftIU5q?Lv8v9J#K66fF%`VH3Ibq zWg!I!jqpGSYYo+Bp&uos!WbIv478X@<=*|SQi53TSu`05!l3K6Pq>u4xgxWNM zv5|9p^@r%%8K0Rkx0VndgN3=)2rG3|t@Rpb^)Ra%p(~AWMl^TH6YfKp9=4!{ZR>mxKphN?!*>FM6W=i z+MmVzgHe_0HsT8r@!`EEDDIAdOR1b-R_6AUEw!bHG_F0*m$Mn|I3=n*8jYv5hx@1j zJXZxc5xeT|=wT`D%3^PljXH%MNRCqMj)T+lY2iwmfNJOkE5{#vl1l00Z!prsOqnVj zgMOHBISN;wjh8WKlBxVqv|bmILX$}9Kj?tqgRNy9VuL)TLS9x~SZAO3v{o$c93gQ)qFN7E z{B)I4(3(jW+xV3I(#a5HaBX~n@5A8iK|8XpeP-)MQ#VhO6Bu_l=YjIUsK%X5S)k@B`n z8|{wHR^(503Cnr^Nz|!ARRWb0n37n;ZBOw3?}?bVV*1v*NFli^J^3OR0;VP|$<8SB z2&b2-(EpI+;b3rCVdJuVGZ>nv=m>XsUq=6ftXkZ?w6WvN;){N;VeDt!v-T4UHGfyz zN6DV0whuyzA?O)5mwE1n=I9j-?rM)8#Gxg~@)2YtW8#xpQ8jG>j~^ zXf|7JFLkDJ*xH{y40q_&n>{rzKg7|o;6*iAZ1(xSAMA7fM&(3j2JDYKW=Y2`G9~4= zoLuHCg1Fv@71eCBLSmoRFFY{^xC8TrJ#Na{<+Bz-tdS2|@gLp<%(jqYWP{`mOtUeV z|1H97y?)mO&bV$36#aeQS|}RVZF=plOrL`%HqM8D7t`$H;P*W;(!8Ix6s+C$24)nF ztcUuyx=oGl%J!w;7!AD+vrMo%b9)e9Tdt2?W_EX-__SyP9JqF9`fWnnf!eZ`@djrk zY9pyDYm|K&{D`6K=d--SU!4z2cF&TLsXO_ybrzet+QY-+jAC(DyDeLh{QQz~N^YEX zNPpWEg_i_LA283kQFxh4Hu);eHSYH@(%6nzZvG#Ww>6e!c*9c8m7|%DQ zXZuGHRf@WG5FgD!dqqa>NNLDhgZ<;ohaESQdX=qx&}seQ{pSl`-JXi1vOqbI^=0$e z$SqG4m$_>s4iVDr?#MVxy5@pf1=?s>twBG@<|4YsYGd`NGzP_MleLF$Hj2`y5L~CV zK)rkeid(lC3BEo|dOF!`SHpgy3C0NvEp9i8E@;9@iB=FnNNd!Z`^#S3o8prA=2Cx; z(#jP2d??xxlUIz@D(xVE3egQJ=+xIDixzJkIV^nAGc|;u_zInH;yZG%`;@G!Y9_e= zs*uH7TZe}hsI9<~82n0?e&u`VaJRD39Adc?gX)>{9O&vVnjg9@pFb$%_6|pepm^Ap z2%;M^jD0&v-NIH&{?w0LN{RD{#$&R=-E-+pjJ_c@IZ%320*h`)5i;hr@ATm(+5tCH zWGAC16ATf8DbFJ^@^-q8%*!4m0OfnWppG0G)`ejP zo#ZPjB4bN>ZsVP0s}ZrN+P>=7*WOS-=18.0.0", - "obsidian_cli": ">=1.0.0" - }, - "capabilities": { - "tools": true, - "resources": false, - "prompts": false - }, - "tools": [] + "user_config": { + "vault_name": { + "type": "string", + "title": "Vault Name", + "description": "Name of the Obsidian vault to manage (case-sensitive)", + "required": true + } + } } diff --git a/package.json b/package.json index 30a5f64..68539fb 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "main": "dist/index.js", "scripts": { "build": "tsc", + "validate-manifest": "mcpb validate manifest.json", "pack": "npm run build && mcpb pack", "test": "jest", "dev": "tsc --watch", @@ -28,6 +29,7 @@ "zod": "^3.22.4" }, "devDependencies": { + "@anthropic-ai/mcpb": "^2.1.2", "@types/jest": "^29.5.11", "@types/node": "^20.10.6", "jest": "^29.7.0", diff --git a/specs/001-obsidian-mcp-bundle/tasks.md b/specs/001-obsidian-mcp-bundle/tasks.md index 1328ee7..244035c 100644 --- a/specs/001-obsidian-mcp-bundle/tasks.md +++ b/specs/001-obsidian-mcp-bundle/tasks.md @@ -275,7 +275,7 @@ **Purpose**: Improvements that affect multiple user stories -- [ ] T149 [P] Add bundle icon (icon.png) to assets/ directory +- [X] T149 [P] Add bundle icon (icon.png) to assets/ directory - [ ] T150 [P] Create comprehensive README.md with all 95 tools documented - [ ] T151 [P] Add CHANGELOG.md following semver conventions - [ ] T152 [P] Update manifest.json tools array with accurate descriptions @@ -284,8 +284,8 @@ - [ ] T155 [P] Implement consistent error response structure across all tools - [ ] T156 [P] Add comprehensive parameter sanitization for security - [ ] T157 [P] Optimize CLI command construction for performance -- [ ] T158 Verify manifest.json with `mcpb pack --validate` -- [ ] T159 Run TypeScript build (`npm run build`) and verify no errors +- [X] T158 Verify manifest.json with `mcpb pack --validate` +- [X] T159 Run TypeScript build (`npm run build`) and verify no errors - [ ] T160 Test bundle packaging with `npm run pack` (creates .mcpb file) - [ ] T161 Validate quickstart.md scenarios against implemented tools - [ ] T162 [P] Add platform-specific testing (macOS, Windows, Linux)