{"_id":"@4399ywkf/editor-mcp","_rev":"10-1f6ddca1c629e56044e5f6ab9abb8cc9","name":"@4399ywkf/editor-mcp","dist-tags":{"latest":"0.3.1"},"versions":{"0.1.0":{"name":"@4399ywkf/editor-mcp","version":"0.1.0","keywords":["tiptap","mcp","editor","ai","4399"],"_id":"@4399ywkf/editor-mcp@0.1.0","maintainers":[{"name":"ywjszx","email":"ywjszx@4399.com"}],"bin":{"ywkf-editor-hub":"bin/hub.mjs","ywkf-editor-mcp":"bin/stdio.mjs"},"dist":{"shasum":"d24538d6c8679cdbd303a9aa577d979b32bf773b","tarball":"https://registry.npmjs.org/@4399ywkf/editor-mcp/-/editor-mcp-0.1.0.tgz","fileCount":17,"integrity":"sha512-Yu2X3SYa4rKkNwAV7ndXsJlTaKzZaL/prSgtbAOnEgFI1fXOGwsj0D9d50LjQulh1eClishQ1/ypUE7GrvSSRw==","signatures":[{"sig":"MEQCIBgcergqLlPXGvinUpSH34cH8OgBaXcRHO8drZwW9nBsAiAdRB9mtKb8Xq5U48CNditdla8rxjOJqbaxkJbN6bpkfw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53425},"main":"./dist/index.js","type":"module","_from":"file:4399ywkf-editor-mcp-0.1.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./tools":{"types":"./dist/tools.d.ts","import":"./dist/tools.js"},"./bridge":{"types":"./dist/bridge.d.ts","import":"./dist/bridge.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsup --watch","test":"node --experimental-strip-types --test src/*.test.ts","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ywjszx","email":"ywjszx@4399.com"},"_resolved":"/tmp/aa5f35a92a50a9cefaf0232ef54018b0/4399ywkf-editor-mcp-0.1.0.tgz","_integrity":"sha512-Yu2X3SYa4rKkNwAV7ndXsJlTaKzZaL/prSgtbAOnEgFI1fXOGwsj0D9d50LjQulh1eClishQ1/ypUE7GrvSSRw==","_npmVersion":"10.9.0","description":"把 @4399ywkf/editor 的结构化编辑面接出去：工具定义（transport 无关）+ 浏览器桥 + hub + stdio MCP server","directories":{},"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.21.3","@4399ywkf/editor":"^0.2.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","@types/ws":"^8.5.13","typescript":"^5.8.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/editor-mcp_0.1.0_1786674958800_0.774385786698415","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@4399ywkf/editor-mcp","version":"0.2.0","keywords":["tiptap","mcp","editor","ai","4399"],"_id":"@4399ywkf/editor-mcp@0.2.0","maintainers":[{"name":"ywjszx","email":"ywjszx@4399.com"}],"bin":{"ywkf-editor-hub":"bin/hub.mjs","ywkf-editor-mcp":"bin/stdio.mjs"},"dist":{"shasum":"5145a1c6780c346f1948bf28ce0e68e0fbec2a1c","tarball":"https://registry.npmjs.org/@4399ywkf/editor-mcp/-/editor-mcp-0.2.0.tgz","fileCount":17,"integrity":"sha512-rPNygePALeqa6JCIaWzvgcRggRUiUAvpzivM1irKulrmvgi42H31HG76BVi38GfWA7zdcJEP90e9T8YQskLXyQ==","signatures":[{"sig":"MEUCIQDgliDD6kNjNZalDulv3WX8C4/jiXFh+DQsf9blnPdH6QIgabO7G2E63JeztRsAwAV+NJEUw24zGim6E5nUGdRa6hI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62612},"main":"./dist/index.js","type":"module","_from":"file:4399ywkf-editor-mcp-0.2.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./tools":{"types":"./dist/tools.d.ts","import":"./dist/tools.js"},"./bridge":{"types":"./dist/bridge.d.ts","import":"./dist/bridge.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsup --watch","test":"node --experimental-strip-types --test src/*.test.ts","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ywjszx","email":"ywjszx@4399.com"},"_resolved":"/tmp/ad660bafe3aecee983ccf576fef37995/4399ywkf-editor-mcp-0.2.0.tgz","_integrity":"sha512-rPNygePALeqa6JCIaWzvgcRggRUiUAvpzivM1irKulrmvgi42H31HG76BVi38GfWA7zdcJEP90e9T8YQskLXyQ==","_npmVersion":"10.9.0","description":"把 @4399ywkf/editor 的结构化编辑面接出去：工具定义（transport 无关）+ 浏览器桥 + hub + stdio MCP server","directories":{},"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.21.3","@4399ywkf/editor":"^0.3.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","@types/ws":"^8.5.13","typescript":"^5.8.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/editor-mcp_0.2.0_1786694155423_0.2490577698888885","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@4399ywkf/editor-mcp","version":"0.2.1","keywords":["tiptap","mcp","editor","ai","4399"],"_id":"@4399ywkf/editor-mcp@0.2.1","maintainers":[{"name":"ywjszx","email":"ywjszx@4399.com"}],"bin":{"ywkf-editor-hub":"bin/hub.mjs","ywkf-editor-mcp":"bin/stdio.mjs"},"dist":{"shasum":"c8f3d4ce3d1163b170bd2c2365f9a1db1c56256d","tarball":"https://registry.npmjs.org/@4399ywkf/editor-mcp/-/editor-mcp-0.2.1.tgz","fileCount":17,"integrity":"sha512-pM01zeI+JUxB873mhbFpQKqsWU2wrIoN96dV8dNxTuznZYnAOf5s2qX5zLKkuRRCEmj4F0H/wIUexPZZ6O6auQ==","signatures":[{"sig":"MEUCIF/tNwG3l3yZNv5Hris8MAk3PynomyIQYaAmboVt8cL1AiEA2ZRYKIaURoH5LGYbJfTcvF68PeNPQpFuiQQv6Od0B1s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62612},"main":"./dist/index.js","type":"module","_from":"file:4399ywkf-editor-mcp-0.2.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./tools":{"types":"./dist/tools.d.ts","import":"./dist/tools.js"},"./bridge":{"types":"./dist/bridge.d.ts","import":"./dist/bridge.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsup --watch","test":"node --experimental-strip-types --test src/*.test.ts","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ywjszx","email":"ywjszx@4399.com"},"_resolved":"/tmp/1f3e5b717093a1e56ccdd30555480e8b/4399ywkf-editor-mcp-0.2.1.tgz","_integrity":"sha512-pM01zeI+JUxB873mhbFpQKqsWU2wrIoN96dV8dNxTuznZYnAOf5s2qX5zLKkuRRCEmj4F0H/wIUexPZZ6O6auQ==","_npmVersion":"10.9.0","description":"把 @4399ywkf/editor 的结构化编辑面接出去：工具定义（transport 无关）+ 浏览器桥 + hub + stdio MCP server","directories":{},"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.21.3","@4399ywkf/editor":"^0.3.1","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","@types/ws":"^8.5.13","typescript":"^5.8.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/editor-mcp_0.2.1_1786698129865_0.9530542855505815","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@4399ywkf/editor-mcp","version":"0.2.2","keywords":["tiptap","mcp","editor","ai","4399"],"_id":"@4399ywkf/editor-mcp@0.2.2","maintainers":[{"name":"ywjszx","email":"ywjszx@4399.com"}],"bin":{"ywkf-editor-hub":"bin/hub.mjs","ywkf-editor-mcp":"bin/stdio.mjs"},"dist":{"shasum":"9f0352a55498374714dbb4c8c0d2a6fbd75e1b42","tarball":"https://registry.npmjs.org/@4399ywkf/editor-mcp/-/editor-mcp-0.2.2.tgz","fileCount":17,"integrity":"sha512-Cv82gKFB8TOYuUIRbxidB6qPg+nOtg8BqRvRUR8OlF0/2AlYRwCMlKTjzdZqHEDRGu16PT1/UuLApetU9f0mGg==","signatures":[{"sig":"MEUCIEdex+8eg9WmaRsu2Ra0Tz3ZeddgYIcxsalbI8+44GBOAiEA5vmXIXZlb1lcDkOb0uYD8syBFO79C+U22rWQ1LmfyGc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62612},"main":"./dist/index.js","type":"module","_from":"file:4399ywkf-editor-mcp-0.2.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./tools":{"types":"./dist/tools.d.ts","import":"./dist/tools.js"},"./bridge":{"types":"./dist/bridge.d.ts","import":"./dist/bridge.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsup --watch","test":"node --experimental-strip-types --test src/*.test.ts","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ywjszx","email":"ywjszx@4399.com"},"_resolved":"/tmp/8bca27e1668083a6ef3d10e56626af31/4399ywkf-editor-mcp-0.2.2.tgz","_integrity":"sha512-Cv82gKFB8TOYuUIRbxidB6qPg+nOtg8BqRvRUR8OlF0/2AlYRwCMlKTjzdZqHEDRGu16PT1/UuLApetU9f0mGg==","_npmVersion":"10.9.0","description":"把 @4399ywkf/editor 的结构化编辑面接出去：工具定义（transport 无关）+ 浏览器桥 + hub + stdio MCP server","directories":{},"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.21.3","@4399ywkf/editor":"^0.4.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","@types/ws":"^8.5.13","typescript":"^5.8.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/editor-mcp_0.2.2_1786699965242_0.5330359304115357","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@4399ywkf/editor-mcp","version":"0.2.3","keywords":["tiptap","mcp","editor","ai","4399"],"_id":"@4399ywkf/editor-mcp@0.2.3","maintainers":[{"name":"ywjszx","email":"ywjszx@4399.com"}],"bin":{"ywkf-editor-hub":"bin/hub.mjs","ywkf-editor-mcp":"bin/stdio.mjs"},"dist":{"shasum":"d1b177b6a232df52e43b20381c46cbd3576168a1","tarball":"https://registry.npmjs.org/@4399ywkf/editor-mcp/-/editor-mcp-0.2.3.tgz","fileCount":17,"integrity":"sha512-RaUMkZclWoRrVtjxqj3n2ZsiMJ0PFcsDbSvkHchDGUt4yy7qwLoSnTIr8kQ/L3UdHSe1Hlw5x6DjpFqQxb2Ubw==","signatures":[{"sig":"MEYCIQDuBcGSwUBXHlbUAs3Nz9IAcfUcoc0KzIp12RLPk52HIAIhAPr3pb2qbDLsWpGlU1G6n0P9Te+KCyo4Irsm/Dd5udyF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62612},"main":"./dist/index.js","type":"module","_from":"file:4399ywkf-editor-mcp-0.2.3.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./tools":{"types":"./dist/tools.d.ts","import":"./dist/tools.js"},"./bridge":{"types":"./dist/bridge.d.ts","import":"./dist/bridge.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsup --watch","test":"node --experimental-strip-types --test src/*.test.ts","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ywjszx","email":"ywjszx@4399.com"},"_resolved":"/tmp/8837d8b5ecb367a75f2b9cf0095a0075/4399ywkf-editor-mcp-0.2.3.tgz","_integrity":"sha512-RaUMkZclWoRrVtjxqj3n2ZsiMJ0PFcsDbSvkHchDGUt4yy7qwLoSnTIr8kQ/L3UdHSe1Hlw5x6DjpFqQxb2Ubw==","_npmVersion":"10.9.0","description":"把 @4399ywkf/editor 的结构化编辑面接出去：工具定义（transport 无关）+ 浏览器桥 + hub + stdio MCP server","directories":{},"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.21.3","@4399ywkf/editor":"^0.4.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","@types/ws":"^8.5.13","typescript":"^5.8.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/editor-mcp_0.2.3_1786936974005_0.6084456637781637","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@4399ywkf/editor-mcp","version":"0.2.4","keywords":["tiptap","mcp","editor","ai","4399"],"_id":"@4399ywkf/editor-mcp@0.2.4","maintainers":[{"name":"ywjszx","email":"ywjszx@4399.com"}],"bin":{"ywkf-editor-hub":"bin/hub.mjs","ywkf-editor-mcp":"bin/stdio.mjs"},"dist":{"shasum":"e9a863b588990f0d5ddb7978f328281fc7a12e58","tarball":"https://registry.npmjs.org/@4399ywkf/editor-mcp/-/editor-mcp-0.2.4.tgz","fileCount":17,"integrity":"sha512-cNMj/0karUs7cG+RZ2uBTm+pbi6ugb4vjZd1d6n3V+hSWNxbb27FGYLNyE69HZsDcl1J8G0nupQEiJ6N+Yeofg==","signatures":[{"sig":"MEYCIQDYO3WzVwJJULSHXpvpJ5LbywGmUqvEI5xBYtJe1uf2QwIhAJP1rM1ser4T6HxxyBvSqcMw5GQDGusafIlduCSaXTb7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62612},"main":"./dist/index.js","type":"module","_from":"file:4399ywkf-editor-mcp-0.2.4.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./tools":{"types":"./dist/tools.d.ts","import":"./dist/tools.js"},"./bridge":{"types":"./dist/bridge.d.ts","import":"./dist/bridge.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsup --watch","test":"node --experimental-strip-types --test src/*.test.ts","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ywjszx","email":"ywjszx@4399.com"},"_resolved":"/tmp/6fd1a8397d1f69353f34e9f90d4cfe35/4399ywkf-editor-mcp-0.2.4.tgz","_integrity":"sha512-cNMj/0karUs7cG+RZ2uBTm+pbi6ugb4vjZd1d6n3V+hSWNxbb27FGYLNyE69HZsDcl1J8G0nupQEiJ6N+Yeofg==","_npmVersion":"10.9.0","description":"把 @4399ywkf/editor 的结构化编辑面接出去：工具定义（transport 无关）+ 浏览器桥 + hub + stdio MCP server","directories":{},"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.21.3","@4399ywkf/editor":"^0.4.4","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","@types/ws":"^8.5.13","typescript":"^5.8.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/editor-mcp_0.2.4_1786957126954_0.5368909015319578","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@4399ywkf/editor-mcp","version":"0.2.5","keywords":["tiptap","mcp","editor","ai","4399"],"_id":"@4399ywkf/editor-mcp@0.2.5","maintainers":[{"name":"ywjszx","email":"ywjszx@4399.com"}],"bin":{"ywkf-editor-hub":"bin/hub.mjs","ywkf-editor-mcp":"bin/stdio.mjs"},"dist":{"shasum":"8fce503c27929592c466b8672e0535d511cb4072","tarball":"https://registry.npmjs.org/@4399ywkf/editor-mcp/-/editor-mcp-0.2.5.tgz","fileCount":17,"integrity":"sha512-aJ+c0d5megQrOM5Pd/NkfEUpaMfrfYMGRteVydW5RTCJYPhaZPGSG236tj3wCUu/e96x7o7/TwGYj8jnl8EpNw==","signatures":[{"sig":"MEUCIHriVt0+NkFTPuELZMEYo194J2Yd+HdjK0yskDHnjmjNAiEA/KzV46IexO+vdUJF21wZVftejdWinCfcsxMECL/mOWs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62612},"main":"./dist/index.js","type":"module","_from":"file:4399ywkf-editor-mcp-0.2.5.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./tools":{"types":"./dist/tools.d.ts","import":"./dist/tools.js"},"./bridge":{"types":"./dist/bridge.d.ts","import":"./dist/bridge.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsup --watch","test":"node --experimental-strip-types --test src/*.test.ts","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ywjszx","email":"ywjszx@4399.com"},"_resolved":"/tmp/5d585aba193f7d6c259814d0e27c5fd0/4399ywkf-editor-mcp-0.2.5.tgz","_integrity":"sha512-aJ+c0d5megQrOM5Pd/NkfEUpaMfrfYMGRteVydW5RTCJYPhaZPGSG236tj3wCUu/e96x7o7/TwGYj8jnl8EpNw==","_npmVersion":"10.9.0","description":"把 @4399ywkf/editor 的结构化编辑面接出去：工具定义（transport 无关）+ 浏览器桥 + hub + stdio MCP server","directories":{},"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.21.3","@4399ywkf/editor":"^0.5.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","@types/ws":"^8.5.13","typescript":"^5.8.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/editor-mcp_0.2.5_1787032155848_0.05695579129403061","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@4399ywkf/editor-mcp","version":"0.2.6","keywords":["tiptap","mcp","editor","ai","4399"],"_id":"@4399ywkf/editor-mcp@0.2.6","maintainers":[{"name":"ywjszx","email":"ywjszx@4399.com"}],"bin":{"ywkf-editor-hub":"bin/hub.mjs","ywkf-editor-mcp":"bin/stdio.mjs"},"dist":{"shasum":"6cbe2caf24d89082eba8a25216e19f1d0ba4922a","tarball":"https://registry.npmjs.org/@4399ywkf/editor-mcp/-/editor-mcp-0.2.6.tgz","fileCount":17,"integrity":"sha512-1UBx8pLgWNV7RTanLud5NlM9LingLXMuY/Yo1c21IZ3SPOp1TNMjb/gEC94koyM2pkwmJwcjkx3D3Jq3AI4qqA==","signatures":[{"sig":"MEUCIQCS9FstRtcnAZClSmtUaApFMrmVPndfXk6PVF3i9RE9HQIgdWmTasEB+ZIFoa8qN22xy9/oj4tqTi3Tj3EMwfFcrBs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62612},"main":"./dist/index.js","type":"module","_from":"file:4399ywkf-editor-mcp-0.2.6.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./tools":{"types":"./dist/tools.d.ts","import":"./dist/tools.js"},"./bridge":{"types":"./dist/bridge.d.ts","import":"./dist/bridge.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsup --watch","test":"node --experimental-strip-types --test src/*.test.ts","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ywjszx","email":"ywjszx@4399.com"},"_resolved":"/tmp/e1a058d33b395d3cf0f1b53e649dd99f/4399ywkf-editor-mcp-0.2.6.tgz","_integrity":"sha512-1UBx8pLgWNV7RTanLud5NlM9LingLXMuY/Yo1c21IZ3SPOp1TNMjb/gEC94koyM2pkwmJwcjkx3D3Jq3AI4qqA==","_npmVersion":"10.9.0","description":"把 @4399ywkf/editor 的结构化编辑面接出去：工具定义（transport 无关）+ 浏览器桥 + hub + stdio MCP server","directories":{},"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.21.3","@4399ywkf/editor":"^0.6.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","@types/ws":"^8.5.13","typescript":"^5.8.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/editor-mcp_0.2.6_1787037894211_0.5934963186100375","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@4399ywkf/editor-mcp","version":"0.3.0","keywords":["tiptap","mcp","editor","ai","4399"],"_id":"@4399ywkf/editor-mcp@0.3.0","maintainers":[{"name":"ywjszx","email":"ywjszx@4399.com"}],"bin":{"ywkf-editor-hub":"bin/hub.mjs","ywkf-editor-mcp":"bin/stdio.mjs"},"dist":{"shasum":"dc9ffdbb7179eec25fcf7d175ed555a925ba0673","tarball":"https://registry.npmjs.org/@4399ywkf/editor-mcp/-/editor-mcp-0.3.0.tgz","fileCount":17,"integrity":"sha512-ToMjHLgrJCMnoXLq7laNZVWjnqwM2+xtfloxI4qbO5bpecfr5EGQ8E1YwjkYlFsrrdplxNNh4Lug9kYxDGzR6A==","signatures":[{"sig":"MEUCIQDeUXswXL1AhJlG7cXZbTdCxT0mPO0YltHNtIdarxK8GAIgbetcuInP4O7RKYL2wpuCYk+9TcUVjupvf6cBQ2z9Mv4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":84090},"main":"./dist/index.js","type":"module","_from":"file:4399ywkf-editor-mcp-0.3.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./tools":{"types":"./dist/tools.d.ts","import":"./dist/tools.js"},"./bridge":{"types":"./dist/bridge.d.ts","import":"./dist/bridge.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsup --watch","test":"node --experimental-strip-types --test src/*.test.ts","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ywjszx","email":"ywjszx@4399.com"},"_resolved":"/tmp/b76d73f429827f34add35ecaa44c2022/4399ywkf-editor-mcp-0.3.0.tgz","_integrity":"sha512-ToMjHLgrJCMnoXLq7laNZVWjnqwM2+xtfloxI4qbO5bpecfr5EGQ8E1YwjkYlFsrrdplxNNh4Lug9kYxDGzR6A==","_npmVersion":"10.9.0","description":"把 @4399ywkf/editor 的结构化编辑面接出去：工具定义（transport 无关）+ 浏览器桥 + hub + stdio MCP server","directories":{},"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.21.3","@4399ywkf/editor":"^0.7.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","@types/ws":"^8.5.13","typescript":"^5.8.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/editor-mcp_0.3.0_1787143127245_0.6269927230684802","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"_id":"@4399ywkf/editor-mcp@0.3.1","bin":{"ywkf-editor-hub":"bin/hub.mjs","ywkf-editor-mcp":"bin/stdio.mjs"},"dist":{"shasum":"a03fcd7634fb6825fd192fa37cf903cc88084aea","tarball":"https://registry.npmjs.org/@4399ywkf/editor-mcp/-/editor-mcp-0.3.1.tgz","fileCount":17,"integrity":"sha512-UiXZ2JTGbi81KD7HbMx2E6B4mDTBz0+B/T7kuflfe6siQh0s9p45G1j9fGUI0x3viWZGFbaQ+sEV3Ko9YJ0eng==","signatures":[{"sig":"MEUCIQCcXrNsFvX9mnnp6zmmm2Oz/g5fXBMRCHZZsYCg9oI/IQIgRTQBn1Gr6z+N8qeAgAMo/rJ/PKba+Ljx3SN3FRXFJOA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDXUs1RbzVEdVpU9ibg5xAWXPF6AYRGCu5ptqy4w8BuKgIgYAfw8XEn/upq4LCZi86bKBCLm2oMIcaMrHecetWzATM="}],"unpackedSize":84090},"main":"./dist/index.js","name":"@4399ywkf/editor-mcp","type":"module","_from":"file:4399ywkf-editor-mcp-0.3.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./tools":{"types":"./dist/tools.d.ts","import":"./dist/tools.js"},"./bridge":{"types":"./dist/bridge.d.ts","import":"./dist/bridge.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsup --watch","test":"node --experimental-strip-types --test src/*.test.ts","build":"tsup","typecheck":"tsc --noEmit"},"version":"0.3.1","_npmUser":{"name":"ywjszx","email":"ywjszx@4399.com"},"keywords":["tiptap","mcp","editor","ai","4399"],"_resolved":"/tmp/3e6a2c202006018bea7ed90c9150f6af/4399ywkf-editor-mcp-0.3.1.tgz","_integrity":"sha512-UiXZ2JTGbi81KD7HbMx2E6B4mDTBz0+B/T7kuflfe6siQh0s9p45G1j9fGUI0x3viWZGFbaQ+sEV3Ko9YJ0eng==","_npmVersion":"10.9.0","description":"把 @4399ywkf/editor 的结构化编辑面接出去：工具定义（transport 无关）+ 浏览器桥 + hub + stdio MCP server","directories":{},"maintainers":[{"name":"ywjszx","email":"ywjszx@4399.com"}],"_nodeVersion":"22.12.0","dependencies":{"ws":"^8.21.3","@4399ywkf/editor":"^0.8.0","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","@types/ws":"^8.5.13","typescript":"^5.8.2","@types/node":"^22.10.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/editor-mcp_0.3.1_1789460638492_0.9751934996796232"}}},"time":{"created":"2026-08-14T02:35:58.635Z","modified":"2026-09-15T08:23:58.765Z","0.1.0":"2026-08-14T02:35:58.965Z","0.2.0":"2026-08-14T07:55:55.580Z","0.2.1":"2026-08-14T09:02:10.019Z","0.2.2":"2026-08-14T09:32:45.435Z","0.2.3":"2026-08-17T03:22:54.148Z","0.2.4":"2026-08-17T08:58:47.098Z","0.2.5":"2026-08-18T05:49:15.986Z","0.2.6":"2026-08-18T07:24:54.365Z","0.3.0":"2026-08-19T12:38:47.391Z","0.3.1":"2026-09-15T08:23:58.573Z"},"keywords":["tiptap","mcp","editor","ai","4399"],"description":"把 @4399ywkf/editor 的结构化编辑面接出去：工具定义（transport 无关）+ 浏览器桥 + hub + stdio MCP server","maintainers":[{"name":"ywjszx","email":"ywjszx@4399.com"}],"readme":"# @4399ywkf/editor-mcp\n\n把 [`@4399ywkf/editor`](../editor) 的结构化编辑面接出去，让 AI 操作**浏览器里那个真实的\n编辑器实例**（文档是 tiptap，表格是 Univer）—— AI 改的和用户看的是同一个。\n\n## 分层\n\nMCP 只是最外面那一层的一种传输。中间两层跟它没关系：\n\n| 层 | 在哪 | 知道 MCP 吗 |\n|---|---|---|\n| runtime：LiteXML 编解码 + 8 类操作 | `@4399ywkf/editor/doc-runtime` | 不知道 |\n| runtime：表格快照读 + facade 写 | `@4399ywkf/editor/sheet-runtime` | 不知道 |\n| 工具面：name / JSON Schema / description | 本包 `./tools` | 不知道 |\n| 传输：浏览器桥 / hub / stdio MCP | 本包 `./bridge` 与 `bin/` | 知道 |\n\nruntime 住在编辑器包里而不是这儿，是因为 `NODE_TAG` 镜像的是**那个编辑器自己的\nschema**。跨包之后每加一个节点类型，序列化就静默降级成 `<node type=\"...\"/>` 占位符 ——\n不报错、不丢数据、也不告诉你。表格同理：对 Univer facade 的探测全钉在\n`sheet-runtime/facade.ts`，Univer 版本一漂只改那一个文件。\n\n两个 runtime 的 `call(tool, args)` 是同构的，桥不需要知道自己面对的是文档还是表格。\n\n## 用法一：不走 MCP（推荐给已有 agent loop 的项目）\n\njizhi_ai 那种 `builtin-tool-*` executor 直接调的形态，只要工具定义和 runtime，\n一行传输代码都不需要：\n\n```ts\nimport { DOC_TOOLS } from \"@4399ywkf/editor-mcp/tools\"\nimport { DocRuntime } from \"@4399ywkf/editor/doc-runtime\"\n\nconst runtime = new DocRuntime()\n// <NotionEditor onEditorReady={(editor) => runtime.setEditor(editor)} />\n\n// 把 DOC_TOOLS 喂给模型，回调里：\nconst result = await runtime.call(toolName, args)\n```\n\n`DocRuntime` 的方法名对齐了 jizhi_ai 的 `@jizhi/editor-runtime`\n（`getPageContent` / `modifyNodes` / `replaceText` / `setEditor` / `isReady`），\n两套编辑器可以被同一套工具面驱动。\n\n表格换成 `SHEET_TOOLS` + `SheetRuntime`，形状一模一样：\n\n```ts\nimport { SHEET_TOOLS } from \"@4399ywkf/editor-mcp/tools\"\nimport { SheetRuntime } from \"@4399ywkf/editor/sheet-runtime\"\n\nconst runtime = new SheetRuntime()\n// <DocumentView format=\"sheet\" onReady={(univerAPI) => runtime.setUniverAPI(univerAPI)} />\n```\n\n两个都挂就喂 `ALL_TOOLS`（= `DOC_TOOLS` + `SHEET_TOOLS`），\n执行侧用 `composeRuntimes` 按前缀分发（见下）。\n\n## 用法二：走 MCP\n\n```\nagent ──stdio MCP──▶ ywkf-editor-mcp ──POST /api/call──▶ ywkf-editor-hub ──WS──▶ 浏览器\n                     (只转发)                             (中继)                (执行体)\n```\n\n**1. 页面侧接上桥**\n\n```tsx\nimport { DocRuntime } from \"@4399ywkf/editor/doc-runtime\"\nimport { attachBridge } from \"@4399ywkf/editor-mcp/bridge\"\n\nconst runtime = useMemo(() => new DocRuntime(), [])\n\nuseEffect(\n  () => attachBridge({\n    runtime,\n    url: \"ws://127.0.0.1:4399/bridge\",\n    onStatus: (s) => setConn(s),          // connecting | primary | observer | disconnected\n  }),\n  [runtime],\n)\n\n<NotionEditor onEditorReady={(editor) => runtime.setEditor(editor)} />\n```\n\n样式记得引一次 `@4399ywkf/editor/styles`（AI 改动块的闪烁提示 `.ai-flash` 在里面）。\n\n同一个页面上既有文档又有表格时，用 `composeRuntimes` 把两个运行时并成一个挂上去 ——\n按工具名前缀路由，`doc_*` 去 tiptap，`sheet_*` 去 Univer：\n\n```tsx\nimport { attachBridge, composeRuntimes } from \"@4399ywkf/editor-mcp/bridge\"\n\nconst doc = useMemo(() => new DocRuntime(), [])\nconst sheet = useMemo(() => new SheetRuntime(), [])\n\nuseEffect(\n  () => attachBridge({ runtime: composeRuntimes({ doc, sheet }), url: \"ws://127.0.0.1:4399/bridge\" }),\n  [doc, sheet],\n)\n```\n\n只挂一个也行 —— 打到没挂的前缀时报的是「本页面没有挂 sheet_\\* 的运行时，可用的工具面：\ndoc_\\*」，而不是「未知工具」。差别在于前者不会让模型换个工具名反复重试。\n\n**2. 起 hub**\n\n```bash\nnpx ywkf-editor-hub --port 4399 --token $(openssl rand -hex 16)\n```\n\n默认只听 `127.0.0.1`。`--token` 可选但建议开：这个口的权限是「以用户身份重写他正在\n编辑的文档」，不开的话本机任何进程都能调。`--static <dir>` 可以顺便托管一个页面，\n本地调试方便。`--out-dir <dir>` 指定文档的读写目录（默认 hub 的工作目录），\n`doc_export_docx` / `doc_import_docx` / `sheet_export_xlsx` 只能碰这个目录里的文件。\n\n**3. 注册 MCP**\n\n```json\n{\n  \"mcpServers\": {\n    \"ywkf-editor\": {\n      \"command\": \"npx\",\n      \"args\": [\"ywkf-editor-mcp\", \"--url\", \"http://127.0.0.1:4399\"],\n      \"env\": { \"EDITOR_MCP_TOKEN\": \"刚才那个 token\" }\n    }\n  }\n}\n```\n\n> codex `exec` 下需要 `--dangerously-bypass-approvals-and-sandbox`：`approval: never`\n> 会把 MCP 调用直接判成 \"user cancelled\"。交互式 `codex` 里可以逐次批准。\n\n## 工具（doc 10 个 + sheet 6 个）\n\n### 文档（tiptap）\n\n| 工具 | 用途 |\n|---|---|\n| `doc_read` | 读全文，xml / json / both |\n| `doc_schema` | 运行时反射出的节点·标记·标签映射·哪些类型带 id。**永不与实现漂移** |\n| `doc_find` | 检索，返回可直接回填的 nodeId |\n| `doc_get_selection` | 用户此刻的选区；无选区时显式声明「不要沿用历史」 |\n| `doc_replace_text` | 块内文本替换（首选），只改命中的那一段，其余格式保住 |\n| `doc_format_text` | 加/去 bold·italic·underline·strike·code·sup·sub（改格式首选） |\n| `doc_modify_nodes` | 结构化 insert / remove / modify |\n| `doc_table_edit` | 表格：增删行列、合并拆分、批量写值 |\n| `doc_export_docx` | 导出成 .docx 落盘，返回路径 + 统计 + 警告 |\n| `doc_import_docx` | 读一份 .docx 灌进编辑器（**整篇替换**） |\n\n刻意保持小。参照系：BlockNote AI 只有 3 个工具；把 tiptap 每个 command 都包成工具的\n`tiptap-apcore` 做到 79 个，GitHub 1 star。后两个之所以够格占位置：没有它们，\n模型能把文档改好却交付不出去 —— 「改完了，然后呢」是个死胡同。\n\n工具描述里的可用标签清单是从 runtime 的标签表**生成**的，不是手抄的 —— 编辑器加一个\n节点类型，description 自动跟着变（`src/tools.test.ts` 守这条）。\n\n### 表格（Univer）\n\n| 工具 | 用途 |\n|---|---|\n| `sheet_read` | 工作簿概览 + 一张表的 CSV 视图与公式清单。写之前必须先调它 |\n| `sheet_find` | 全簿检索（值和公式都搜），返回可直接回填的 `sheet` + A1 `ref` |\n| `sheet_set_values` | 从某格起写一块二维值，`\"=…\"` 是公式、`null` 清空 |\n| `sheet_edit_rows_cols` | 插入 / 删除整行整列（0-based） |\n| `sheet_manage_sheets` | 工作表 add / rename / delete / activate |\n| `sheet_export_xlsx` | 导出成 .xlsx 落盘，返回路径 + 统计 + 警告 |\n\n定位一律用 A1 引用，不用 node id —— 表格的坐标系本来就是稳定的，不需要 doc 那套\n「读了才有 id」的仪式。但**先读后写**这条纪律不变，而且比 doc 更要紧：A1 引用不读也能\n编出来，模型会照着想象中的表结构盲写。所以写工具的 description 里都写死了「先 sheet_read」。\n\n读走快照、写走 facade 是有意分的两条路：读是纯数据（Univer 版本漂移伤不到），\n且 CSV 文本的 token 成本只有 JSON 单元格矩阵的几分之一；写必须进 Univer 的 command\n体系才有撤销栈和协同广播，直接改快照是死路。\n\n`sheet_manage_sheets` 的 `delete` 不允许省略 `sheet` —— 「默认删活动表」是脚枪。\n\n### 文档字节不进模型上下文\n\n`doc_export_docx` / `doc_import_docx` / `sheet_export_xlsx` 的参数和返回值里**没有文件内容**，\n只有路径：\n\n```\n模型 ──path──▶ hub ──base64──▶ 浏览器（真正的 serializeDocx / parseDocx / serializeXlsx）\n模型 ◀──path── hub ◀──base64── 浏览器\n```\n\n一份带图的 docx / xlsx 动辄几 MB，base64 之后更大，塞进上下文会直接把窗口撑爆。所以字节\n只在 hub ↔ 浏览器之间走一趟，hub 负责落盘 / 读盘。这是 hub 唯一一处不\"纯中继\"的地方。\n\n文件钉在 `--out-dir`（默认 hub 的工作目录）里，`../` 和绝对路径一律拒 —— 那几个\n路径参数是**模型给的**，「能读写用户整块磁盘」和「能改用户正在编辑的文档」是两个\n量级的权限。\n\n前提：编辑器实例得注册了 `ExportDocx` / `ImportDocx` 扩展（从\n`@4399ywkf/editor/docx` 引入，通过 `<NotionEditor extensions={[...]}>` 注入）。\n没注册时工具会报错并说明怎么装，而不是静默失败。表格侧没有这道手续 ——\n`sheet_export_xlsx` 直接读 Univer 快照拼 OOXML，但它返回的 `warnings` 是\n**导出时丢了什么**（图片、条件格式等插件数据），非空就得如实转述，别当成功报。\n\n表格**导入**不在工具面里：`.xlsx / .csv / .tsv` 走 `<DocumentView source={file}>`\n（实现在 `@4399ywkf/editor/xlsx` 的 `importSheetSource`）—— 那是用户打开文件的动作，\n不是 AI 的动作。\n\n## 两条硬规则\n\nLiteXML 对 ProseMirror JSON 是**有损压缩**（省 1.55x 以上 token），所以：\n\n1. **`modify` 以原节点 attrs 为底做合并**，只让 XML 里出现过的键覆盖。否则\n   `textAlign` / `backgroundColor` / `language` 会被静默抹掉 ——\n   「AI 改一个词顺手毁排版」。\n2. **未知节点降级成 `<node type=\"...\"/>`**，不抛错、不丢失。\n\n原则：**读可以有损压缩，写绝不要求模型重述它没看见的状态。**\n所以 `doc_replace_text` / `doc_format_text`（外科手术式）优先于\n`doc_modify_nodes`（整块替换）。\n\n## 已知限制\n\n都源自同一件事：**文档活在浏览器内存里**。\n\n1. **刷新页面文档就回到初始内容。** 真架构里文档应该活在浏览器之外（yjs / 服务端持有）。\n2. **多标签页 = 多份互不相干的文档。** 现在是「第一个连上的持有桥，后开的降级旁观」，\n   `onStatus` 会回 `observer`，请在界面上显示出来。接了 yjs 之后自然消失。\n3. **没有 AI 编辑的审计与回滚。** ProseMirror 的 Step 可 invert，应该持久化 inverted\n   steps 做 `doc_revert_turn`，目前没做 —— 想兜底的话用 `attachBridge` 的 `onCall`\n   钩子自己存快照。表格侧写操作都走 Univer 的 command 体系，用户按 Ctrl+Z 撤得掉，\n   但同样没有「这一轮 AI 改了哪些格子」的审计记录。\n\n## 开发\n\n```bash\npnpm --filter @4399ywkf/editor build     # 测试要读它的构建产物（标签表 / SheetRuntime）\npnpm --filter @4399ywkf/editor-mcp test  # hub 端到端 + 工具面形状 + 两个 runtime 的不漂移\n```\n","readmeFilename":"README.md"}