5a6009c750
Узел drawio для агента был непрозрачен: round-trip хранит узел, но содержимое
диаграммы недоступно. Стадия 1 даёт минимальный CRUD без рендеринга на беке.
Новые модули:
- drawio-xml.ts: decode-chain (content= base64 -> plain/entity-encoded XML или
compressed <diagram> через pako.inflateRaw raw-deflate + decodeURIComponent;
инфляция потоковая с капом 16 MiB — защита от decompression-bomb); encode
(plain uncompressed по контракту createDrawioSvg); линтер (все правила ->
структурированный tool-error с cellId; edge без дочернего mxGeometry — ошибка
№1); stable mxHash (sha256 по нормализованному XML) — ключ optimistic-lock.
- drawio-preview.ts: чистый TS schematic SVG (rect/ellipse/rhombus/edge/label,
контейнеры -> абсолютные координаты, unknown-стенсил -> подписанный rect),
без зависимостей и без бэкенд-рендера.
Инструменты (SHARED_TOOL_SPECS, deferred-тир):
- drawio_get(pageId, node, format?) -> XML/SVG + мета {attachmentId,title,w,h,
cellCount,hash}; читает человеческий compressed-экспорт losslessly.
- drawio_create(pageId, where, xml, title?) -> lint -> preview -> .drawio.svg ->
upload (тот же attachment-конвейер + validateDocUrls) -> insert drawio-узел;
возвращает адресуемый '#<index>'-хендл (у схемы drawio нет атрибута id).
- drawio_update(pageId, node, xml, baseHash) -> baseHash-конфликт до записи;
перепривязывает РОВНО адресованный узел (не все с общим attachmentId).
pako@2.0.3 — единственная новая зависимость (lockfile синхронизирован).
closes #423
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
68 lines
1.9 KiB
JSON
68 lines
1.9 KiB
JSON
{
|
|
"name": "@docmost/mcp",
|
|
"version": "1.0.0",
|
|
"description": "A Model Context Protocol (MCP) server for Docmost, allowing AI agents to manage documentation spaces and pages.",
|
|
"private": true,
|
|
"type": "module",
|
|
"main": "./build/index.js",
|
|
"exports": {
|
|
".": "./build/index.js",
|
|
"./http": "./build/http.js"
|
|
},
|
|
"bin": {
|
|
"docmost-mcp": "./build/stdio.js"
|
|
},
|
|
"scripts": {
|
|
"build": "tsc",
|
|
"start": "node build/stdio.js",
|
|
"watch": "tsc --watch",
|
|
"pretest": "tsc",
|
|
"test": "node --test \"test/unit/*.test.mjs\" \"test/mock/*.test.mjs\"",
|
|
"test:unit": "node --test \"test/unit/*.test.mjs\"",
|
|
"test:mock": "node --test \"test/mock/*.test.mjs\"",
|
|
"test:e2e": "node test-e2e.mjs"
|
|
},
|
|
"keywords": [
|
|
"mcp",
|
|
"docmost",
|
|
"documentation",
|
|
"ai",
|
|
"agent"
|
|
],
|
|
"author": "Moritz Krause",
|
|
"license": "MIT",
|
|
"dependencies": {
|
|
"@docmost/prosemirror-markdown": "workspace:*",
|
|
"@fellow/prosemirror-recreate-transform": "^1.2.3",
|
|
"@hocuspocus/provider": "^3.4.4",
|
|
"@hocuspocus/transformer": "^3.4.4",
|
|
"@modelcontextprotocol/sdk": "^1.25.3",
|
|
"@tiptap/core": "3.20.4",
|
|
"@tiptap/extension-highlight": "3.20.4",
|
|
"@tiptap/extension-image": "3.20.4",
|
|
"@tiptap/extension-link": "3.20.4",
|
|
"@tiptap/extension-subscript": "3.20.4",
|
|
"@tiptap/extension-superscript": "3.20.4",
|
|
"@tiptap/extension-task-item": "3.20.4",
|
|
"@tiptap/extension-task-list": "3.20.4",
|
|
"@tiptap/html": "3.20.4",
|
|
"@tiptap/starter-kit": "3.20.4",
|
|
"@types/jsdom": "^27.0.0",
|
|
"axios": "^1.6.0",
|
|
"form-data": "^4.0.0",
|
|
"jsdom": "^27.4.0",
|
|
"marked": "^17.0.1",
|
|
"pako": "^2.0.3",
|
|
"re2": "^1.21.0",
|
|
"ws": "^8.19.0",
|
|
"y-prosemirror": "1.3.7",
|
|
"yjs": "^13.6.29",
|
|
"zod": "^3.22.0"
|
|
},
|
|
"devDependencies": {
|
|
"@types/form-data": "^2.5.0",
|
|
"@types/node": "^20.0.0",
|
|
"typescript": "^5.0.0"
|
|
}
|
|
}
|