@mcptoolshop/toolshopstudio 1.2.0-toolshop → 1.3.0-toolshop

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/.github/workflows/ci.yml +3 -3
  2. package/CHANGELOG.md +24 -0
  3. package/Dockerfile +7 -5
  4. package/README.es.md +115 -0
  5. package/README.fr.md +115 -0
  6. package/README.hi.md +115 -0
  7. package/README.it.md +115 -0
  8. package/README.ja.md +115 -0
  9. package/README.md +38 -7
  10. package/README.pt-BR.md +115 -0
  11. package/README.zh.md +115 -0
  12. package/dist/gdal/build-args.d.ts +20 -0
  13. package/dist/gdal/build-args.js +43 -0
  14. package/dist/gdal/crud.d.ts +10 -0
  15. package/dist/gdal/crud.js +80 -0
  16. package/dist/gdal/engine.test.d.ts +1 -0
  17. package/dist/gdal/engine.test.js +238 -0
  18. package/dist/gdal/exec.d.ts +10 -0
  19. package/dist/gdal/exec.js +46 -0
  20. package/dist/gdal/full.test.d.ts +1 -0
  21. package/dist/gdal/full.test.js +144 -0
  22. package/dist/gdal/index.d.ts +10 -0
  23. package/dist/gdal/index.js +11 -0
  24. package/dist/gdal/output-polish.d.ts +22 -0
  25. package/dist/gdal/output-polish.js +42 -0
  26. package/dist/gdal/pipeline.test.d.ts +1 -0
  27. package/dist/gdal/pipeline.test.js +112 -0
  28. package/dist/gdal/preflight.d.ts +47 -0
  29. package/dist/gdal/preflight.js +176 -0
  30. package/dist/gdal/preset-spec.d.ts +30 -0
  31. package/dist/gdal/preset-spec.js +50 -0
  32. package/dist/gdal/progress.d.ts +26 -0
  33. package/dist/gdal/progress.js +82 -0
  34. package/dist/gdal/schemas.d.ts +132 -0
  35. package/dist/gdal/schemas.js +46 -0
  36. package/dist/gdal/transform.d.ts +40 -0
  37. package/dist/gdal/transform.js +192 -0
  38. package/dist/gdal/types.d.ts +30 -0
  39. package/dist/gdal/types.js +1 -0
  40. package/dist/index.d.ts +1 -0
  41. package/dist/index.js +1 -0
  42. package/package.json +3 -3
  43. package/scripts/release.mjs +1 -1
  44. package/smoke.mjs +84 -0
  45. package/src/gdal/build-args.ts +56 -0
  46. package/src/gdal/crud.ts +95 -0
  47. package/src/gdal/engine.test.ts +315 -0
  48. package/src/gdal/exec.ts +56 -0
  49. package/src/gdal/full.test.ts +209 -0
  50. package/src/gdal/index.ts +11 -0
  51. package/src/gdal/output-polish.ts +59 -0
  52. package/src/gdal/pipeline.test.ts +172 -0
  53. package/src/gdal/preflight.ts +238 -0
  54. package/src/gdal/preset-spec.ts +81 -0
  55. package/src/gdal/progress.ts +97 -0
  56. package/src/gdal/schemas.ts +58 -0
  57. package/src/gdal/transform.ts +303 -0
  58. package/src/gdal/types.ts +40 -0
  59. package/src/index.ts +1 -0
@@ -23,7 +23,7 @@ concurrency:
23
23
 
24
24
  jobs:
25
25
  test:
26
- name: Typecheck + Test + Smoke (FFmpeg + Pandoc + FreeCAD)
26
+ name: Typecheck + Test + Smoke (FFmpeg + Pandoc + FreeCAD + GDAL)
27
27
  runs-on: ubuntu-latest
28
28
 
29
29
  strategy:
@@ -43,11 +43,11 @@ jobs:
43
43
  - name: Typecheck
44
44
  run: npm run typecheck
45
45
 
46
- - name: Unit tests (FFmpeg + Pandoc + FreeCAD)
46
+ - name: Unit tests (FFmpeg + Pandoc + FreeCAD + GDAL)
47
47
  run: npm test
48
48
 
49
49
  - name: Build
50
50
  run: npm run build
51
51
 
52
- - name: Smoke test (all three tools)
52
+ - name: Smoke test (all four tools)
53
53
  run: npm run smoke
package/CHANGELOG.md CHANGED
@@ -2,6 +2,30 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [1.3.0-toolshop] - 2026-02-19
6
+
7
+ ### Added
8
+ - **GDAL MCP**: full geospatial transform tool (5 presets: raster-wgs84-tiff, vector-geojson, raster-to-png, vector-shapefile, clip-raster)
9
+ - GDAL multi-binary dispatch: gdalwarp, ogr2ogr, gdal_translate selected per preset
10
+ - GDAL two-tier encoding: premium clip-raster with automatic fallback to raster-wgs84-tiff
11
+ - GDAL schema-first design: Zod schemas for TransformGeo, GDALGeoDataAsset, quality tiers
12
+ - buildGDALArgs pure function (deterministic $INPUT/$OUTPUT/$BBOX substitution)
13
+ - GDAL dual-mode progress parser (direct percent + step-counting fallback)
14
+ - GDAL pre/post-flight assertions (input validation, format compatibility, suspicious expansion detection)
15
+ - GDAL context DI pattern (TransformGeoContext) matching FreeCAD/Pandoc/FFmpeg
16
+ - GDALGeoDataCRUD with lazy hydration + optional JSON persistence
17
+ - GDAL output polish (auto-extension, typed output metadata, configurable expiry)
18
+ - Docker image now includes gdal-bin for geospatial transforms
19
+ - Quad-tool smoke test (FFmpeg + Pandoc + FreeCAD + GDAL, 10 end-to-end tests)
20
+ - 114 unit/integration tests (13 FFmpeg + 29 Pandoc + 33 FreeCAD + 39 GDAL)
21
+
22
+ ### Changed
23
+ - Multilingual README: EN + 7 translations (JA, ZH, ES, FR, HI, IT, PT-BR)
24
+ - Docker image relabeled for v1.3.0-toolshop
25
+ - CI labels updated for all four tools
26
+
27
+ ---
28
+
5
29
  ## [1.2.0-toolshop] - 2026-02-19
6
30
 
7
31
  ### Added
package/Dockerfile CHANGED
@@ -12,15 +12,17 @@ RUN npm run build
12
12
  # ── Production stage ───────────────────────────────────────────────
13
13
  FROM node:22-slim
14
14
 
15
- # Install all three runtime binaries
16
- # ffmpeg: video transcoding (FFmpeg YouTube MCP)
17
- # pandoc: document conversion (Pandoc MCP)
15
+ # Install all four runtime binaries
16
+ # ffmpeg: video transcoding (FFmpeg YouTube MCP)
17
+ # pandoc: document conversion (Pandoc MCP)
18
18
  # freecad-cmd: headless CAD export (FreeCAD MCP) — no GUI deps
19
+ # gdal-bin: geospatial transforms (GDAL MCP) — gdalwarp, ogr2ogr, gdal_translate
19
20
  RUN apt-get update && \
20
21
  apt-get install -y --no-install-recommends \
21
22
  ffmpeg \
22
23
  pandoc \
23
24
  freecad-cmd \
25
+ gdal-bin \
24
26
  && rm -rf /var/lib/apt/lists/*
25
27
 
26
28
  WORKDIR /app
@@ -43,8 +45,8 @@ ENV NODE_ENV=production
43
45
  VOLUME ["/sandbox", "/tmp/toolshop"]
44
46
 
45
47
  LABEL org.opencontainers.image.title="ToolShopStudio" \
46
- org.opencontainers.image.description="FFmpeg YouTube + Pandoc + FreeCAD MCP tools — triple-tool kit for ordinary creators" \
47
- org.opencontainers.image.version="1.2.0-toolshop" \
48
+ org.opencontainers.image.description="FFmpeg YouTube + Pandoc + FreeCAD + GDAL MCP tools — quad-tool kit for ordinary creators" \
49
+ org.opencontainers.image.version="1.3.0-toolshop" \
48
50
  org.opencontainers.image.logo="assets/logo.png" \
49
51
  org.opencontainers.image.source="https://github.com/mcp-tool-shop-org/ToolShopStudio" \
50
52
  org.opencontainers.image.licenses="MIT"
package/README.es.md ADDED
@@ -0,0 +1,115 @@
1
+ <p align="center">
2
+ <img src="assets/logo.png" width="400" alt="ToolShopStudio">
3
+ </p>
4
+
5
+ <h1 align="center">ToolShopStudio</h1>
6
+
7
+ <p align="center">
8
+ Una sola instalacion. Cuatro herramientas MCP de produccion para creadores.
9
+ </p>
10
+
11
+ <p align="center">
12
+ <a href="README.md">English</a> |
13
+ <a href="README.ja.md">日本語</a> |
14
+ <a href="README.zh.md">中文</a> |
15
+ <strong>Español</strong> |
16
+ <a href="README.fr.md">Français</a> |
17
+ <a href="README.hi.md">हिन्दी</a> |
18
+ <a href="README.it.md">Italiano</a> |
19
+ <a href="README.pt-BR.md">Português</a>
20
+ </p>
21
+
22
+ <p align="center">
23
+ <a href="https://github.com/mcp-tool-shop-org/ToolShopStudio/actions"><img src="https://github.com/mcp-tool-shop-org/ToolShopStudio/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
24
+ <a href="https://www.npmjs.com/package/@mcptoolshop/toolshopstudio"><img src="https://img.shields.io/npm/v/@mcptoolshop/toolshopstudio" alt="npm version"></a>
25
+ <img src="https://img.shields.io/badge/tools-FFmpeg%20%2B%20Pandoc%20%2B%20FreeCAD%20%2B%20GDAL-orange" alt="Tools">
26
+ <img src="https://img.shields.io/badge/tests-114%20passing-brightgreen" alt="Tests">
27
+ <img src="https://img.shields.io/badge/license-MIT-blue" alt="License">
28
+ </p>
29
+
30
+ ---
31
+
32
+ ## Herramientas Incluidas
33
+
34
+ | Herramienta | Funcion |
35
+ |-------------|---------|
36
+ | **FFmpeg YouTube MCP** | Presets seguros para YouTube (garantizado + premium con fallback), GOP cerrado, miniaturas duales |
37
+ | **Pandoc MCP** | Conversion de documentos sin flags: blog, PDF academico, ebook, slides, newsletter |
38
+ | **FreeCAD MCP** | Exportacion 3D CAD segura: STL, STEP, GLB, 3MF, OBJ — sin interfaz, sin codigo de usuario |
39
+ | **GDAL MCP** | Transformaciones geoespaciales: reproyeccion raster, conversion vectorial, recorte de regiones — el FFmpeg del GIS |
40
+
41
+ Las cuatro herramientas comparten la misma superficie: **schema-first, sandbox, observable, DI por contexto, cero argumentos crudos**.
42
+
43
+ ## Inicio Rapido
44
+
45
+ ```bash
46
+ npm install @mcptoolshop/toolshopstudio
47
+ ```
48
+
49
+ ```typescript
50
+ import {
51
+ transcodeForYouTube,
52
+ createInMemoryCRUD,
53
+ pandoc,
54
+ freecad,
55
+ gdal,
56
+ } from "@mcptoolshop/toolshopstudio";
57
+
58
+ // ── FFmpeg: transcodificacion segura para YouTube ───────────────
59
+ const video = await transcodeForYouTube(
60
+ { inputPath: "input.mp4", outputPath: "output.mp4", preset: "yt-1080p-h264" },
61
+ { signal, userId, notify, createAsset, runFfmpeg, runProbe },
62
+ );
63
+
64
+ // ── Pandoc: conversion de documentos ────────────────────────────
65
+ const doc = await pandoc.convertDocument(
66
+ { inputPath: "thesis.md", outputPath: "thesis.pdf", preset: "academic-pdf" },
67
+ { signal, userId, notify, createAsset, runPandoc, checkInput, assertOutput, statFile },
68
+ );
69
+
70
+ // ── FreeCAD: exportacion 3D CAD ─────────────────────────────────
71
+ const part = await freecad.exportPart(
72
+ { inputPath: "bracket.FCStd", outputPath: "bracket.stl", preset: "stl-print-ready" },
73
+ { signal, userId, notify, createAsset, runFreeCAD, checkInput, assertOutput, statFile },
74
+ );
75
+
76
+ // ── GDAL: transformacion geoespacial ────────────────────────────
77
+ const geo = await gdal.transformGeo(
78
+ { inputPath: "terrain.tif", outputPath: "terrain_wgs84.tif", preset: "raster-wgs84-tiff" },
79
+ { signal, userId, notify, createAsset, runGDAL, checkInput, assertOutput, statFile },
80
+ );
81
+ ```
82
+
83
+ ## Arquitectura
84
+
85
+ - **Schema-first**: Esquemas Zod para cada entrada/salida, totalmente tipado
86
+ - **Context DI**: Todos los efectos secundarios inyectados via objetos de contexto, 100% mockeable
87
+ - **Aislamiento sandbox**: Prevencion de path traversal en cada operacion de archivo
88
+ - **Observable**: Notificaciones tipadas (progreso, advertencias, listo) en cada etapa
89
+ - **Cancelacion**: AbortController propagado a cada checkpoint del pipeline
90
+ - **Fallback**: Los presets premium degradan automaticamente a garantizado en caso de fallo
91
+ - **Ejecucion segura**: FreeCAD usa one-liners Python preconstruidos (sin exec/eval/codigo de usuario)
92
+ - **Multi-binario**: GDAL despacha a gdalwarp, ogr2ogr o gdal_translate segun el preset
93
+
94
+ ## Docker
95
+
96
+ ```bash
97
+ docker build -t toolshopstudio .
98
+ docker run -v ./sandbox:/sandbox toolshopstudio
99
+ ```
100
+
101
+ Los cuatro binarios (`ffmpeg`, `pandoc`, `freecad-cmd`, `gdal-bin`) vienen preinstalados en la imagen.
102
+
103
+ ## Desarrollo
104
+
105
+ ```bash
106
+ npm install # dependencias
107
+ npm run typecheck # tsc --noEmit
108
+ npm test # vitest (114 tests)
109
+ npm run build # compilar a dist/
110
+ npm run smoke # smoke end-to-end (4 herramientas, 10 tests)
111
+ ```
112
+
113
+ ## Licencia
114
+
115
+ MIT
package/README.fr.md ADDED
@@ -0,0 +1,115 @@
1
+ <p align="center">
2
+ <img src="assets/logo.png" width="400" alt="ToolShopStudio">
3
+ </p>
4
+
5
+ <h1 align="center">ToolShopStudio</h1>
6
+
7
+ <p align="center">
8
+ Une seule installation. Quatre outils MCP de production pour les createurs.
9
+ </p>
10
+
11
+ <p align="center">
12
+ <a href="README.md">English</a> |
13
+ <a href="README.ja.md">日本語</a> |
14
+ <a href="README.zh.md">中文</a> |
15
+ <a href="README.es.md">Español</a> |
16
+ <strong>Français</strong> |
17
+ <a href="README.hi.md">हिन्दी</a> |
18
+ <a href="README.it.md">Italiano</a> |
19
+ <a href="README.pt-BR.md">Português</a>
20
+ </p>
21
+
22
+ <p align="center">
23
+ <a href="https://github.com/mcp-tool-shop-org/ToolShopStudio/actions"><img src="https://github.com/mcp-tool-shop-org/ToolShopStudio/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
24
+ <a href="https://www.npmjs.com/package/@mcptoolshop/toolshopstudio"><img src="https://img.shields.io/npm/v/@mcptoolshop/toolshopstudio" alt="npm version"></a>
25
+ <img src="https://img.shields.io/badge/tools-FFmpeg%20%2B%20Pandoc%20%2B%20FreeCAD%20%2B%20GDAL-orange" alt="Tools">
26
+ <img src="https://img.shields.io/badge/tests-114%20passing-brightgreen" alt="Tests">
27
+ <img src="https://img.shields.io/badge/license-MIT-blue" alt="License">
28
+ </p>
29
+
30
+ ---
31
+
32
+ ## Outils Inclus
33
+
34
+ | Outil | Fonction |
35
+ |-------|----------|
36
+ | **FFmpeg YouTube MCP** | Presets YouTube (garanti + premium avec fallback), GOP ferme, double miniature |
37
+ | **Pandoc MCP** | Conversion de documents sans flags : blog, PDF academique, ebook, slides, newsletter |
38
+ | **FreeCAD MCP** | Export 3D CAD securise : STL, STEP, GLB, 3MF, OBJ — headless, sans code utilisateur |
39
+ | **GDAL MCP** | Transformations geospatiales : reprojection raster, conversion vectorielle, decoupage de regions — le FFmpeg du SIG |
40
+
41
+ Les quatre outils partagent la meme surface : **schema-first, sandbox, observable, DI par contexte, zero arguments bruts**.
42
+
43
+ ## Demarrage Rapide
44
+
45
+ ```bash
46
+ npm install @mcptoolshop/toolshopstudio
47
+ ```
48
+
49
+ ```typescript
50
+ import {
51
+ transcodeForYouTube,
52
+ createInMemoryCRUD,
53
+ pandoc,
54
+ freecad,
55
+ gdal,
56
+ } from "@mcptoolshop/toolshopstudio";
57
+
58
+ // ── FFmpeg : transcodage YouTube ────────────────────────────────
59
+ const video = await transcodeForYouTube(
60
+ { inputPath: "input.mp4", outputPath: "output.mp4", preset: "yt-1080p-h264" },
61
+ { signal, userId, notify, createAsset, runFfmpeg, runProbe },
62
+ );
63
+
64
+ // ── Pandoc : conversion de documents ────────────────────────────
65
+ const doc = await pandoc.convertDocument(
66
+ { inputPath: "thesis.md", outputPath: "thesis.pdf", preset: "academic-pdf" },
67
+ { signal, userId, notify, createAsset, runPandoc, checkInput, assertOutput, statFile },
68
+ );
69
+
70
+ // ── FreeCAD : export 3D CAD ─────────────────────────────────────
71
+ const part = await freecad.exportPart(
72
+ { inputPath: "bracket.FCStd", outputPath: "bracket.stl", preset: "stl-print-ready" },
73
+ { signal, userId, notify, createAsset, runFreeCAD, checkInput, assertOutput, statFile },
74
+ );
75
+
76
+ // ── GDAL : transformation geospatiale ───────────────────────────
77
+ const geo = await gdal.transformGeo(
78
+ { inputPath: "terrain.tif", outputPath: "terrain_wgs84.tif", preset: "raster-wgs84-tiff" },
79
+ { signal, userId, notify, createAsset, runGDAL, checkInput, assertOutput, statFile },
80
+ );
81
+ ```
82
+
83
+ ## Architecture
84
+
85
+ - **Schema-first** : Schemas Zod pour chaque entree/sortie, entierement type
86
+ - **Context DI** : Tous les effets de bord injectes via des objets de contexte, 100% mockable
87
+ - **Isolation sandbox** : Prevention de path traversal sur chaque operation fichier
88
+ - **Observable** : Notifications typees (progression, avertissements, pret) a chaque etape
89
+ - **Annulation** : AbortController propage a chaque checkpoint du pipeline
90
+ - **Fallback** : Les presets premium se degradent automatiquement en garanti en cas d'echec
91
+ - **Execution securisee** : FreeCAD utilise des one-liners Python preconstruits (pas d'exec/eval/code utilisateur)
92
+ - **Multi-binaire** : GDAL dispatche vers gdalwarp, ogr2ogr ou gdal_translate selon le preset
93
+
94
+ ## Docker
95
+
96
+ ```bash
97
+ docker build -t toolshopstudio .
98
+ docker run -v ./sandbox:/sandbox toolshopstudio
99
+ ```
100
+
101
+ Les quatre binaires (`ffmpeg`, `pandoc`, `freecad-cmd`, `gdal-bin`) sont preinstalles dans l'image.
102
+
103
+ ## Developpement
104
+
105
+ ```bash
106
+ npm install # dependances
107
+ npm run typecheck # tsc --noEmit
108
+ npm test # vitest (114 tests)
109
+ npm run build # compiler vers dist/
110
+ npm run smoke # smoke end-to-end (4 outils, 10 tests)
111
+ ```
112
+
113
+ ## Licence
114
+
115
+ MIT
package/README.hi.md ADDED
@@ -0,0 +1,115 @@
1
+ <p align="center">
2
+ <img src="assets/logo.png" width="400" alt="ToolShopStudio">
3
+ </p>
4
+
5
+ <h1 align="center">ToolShopStudio</h1>
6
+
7
+ <p align="center">
8
+ एक इंस्टॉल। क्रिएटर्स के लिए चार प्रोडक्शन-ग्रेड MCP टूल्स।
9
+ </p>
10
+
11
+ <p align="center">
12
+ <a href="README.md">English</a> |
13
+ <a href="README.ja.md">日本語</a> |
14
+ <a href="README.zh.md">中文</a> |
15
+ <a href="README.es.md">Español</a> |
16
+ <a href="README.fr.md">Français</a> |
17
+ <strong>हिन्दी</strong> |
18
+ <a href="README.it.md">Italiano</a> |
19
+ <a href="README.pt-BR.md">Português</a>
20
+ </p>
21
+
22
+ <p align="center">
23
+ <a href="https://github.com/mcp-tool-shop-org/ToolShopStudio/actions"><img src="https://github.com/mcp-tool-shop-org/ToolShopStudio/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
24
+ <a href="https://www.npmjs.com/package/@mcptoolshop/toolshopstudio"><img src="https://img.shields.io/npm/v/@mcptoolshop/toolshopstudio" alt="npm version"></a>
25
+ <img src="https://img.shields.io/badge/tools-FFmpeg%20%2B%20Pandoc%20%2B%20FreeCAD%20%2B%20GDAL-orange" alt="Tools">
26
+ <img src="https://img.shields.io/badge/tests-114%20passing-brightgreen" alt="Tests">
27
+ <img src="https://img.shields.io/badge/license-MIT-blue" alt="License">
28
+ </p>
29
+
30
+ ---
31
+
32
+ ## शामिल टूल्स
33
+
34
+ | टूल | कार्य |
35
+ |------|-------|
36
+ | **FFmpeg YouTube MCP** | YouTube-सुरक्षित प्रीसेट (गारंटीड + प्रीमियम ऑटो-फ़ॉलबैक), क्लोज़्ड-GOP, दोहरे थंबनेल |
37
+ | **Pandoc MCP** | ज़ीरो-फ़्लैग डॉक्यूमेंट कन्वर्ज़न: ब्लॉग, एकेडमिक PDF, ebook, स्लाइड्स, न्यूज़लेटर |
38
+ | **FreeCAD MCP** | सुरक्षित 3D CAD एक्सपोर्ट: STL, STEP, GLB, 3MF, OBJ — हेडलेस, यूज़र कोड नहीं |
39
+ | **GDAL MCP** | भू-स्थानिक ट्रांसफ़ॉर्म: रैस्टर री-प्रोजेक्शन, वेक्टर कन्वर्ज़न, रीजन क्लिप — GIS का FFmpeg |
40
+
41
+ चारों टूल्स एक ही डिज़ाइन साझा करते हैं: **स्कीमा-फ़र्स्ट, सैंडबॉक्स्ड, ऑब्ज़र्वेबल, कॉन्टेक्स्ट DI, ज़ीरो रॉ आर्ग्स**।
42
+
43
+ ## त्वरित शुरुआत
44
+
45
+ ```bash
46
+ npm install @mcptoolshop/toolshopstudio
47
+ ```
48
+
49
+ ```typescript
50
+ import {
51
+ transcodeForYouTube,
52
+ createInMemoryCRUD,
53
+ pandoc,
54
+ freecad,
55
+ gdal,
56
+ } from "@mcptoolshop/toolshopstudio";
57
+
58
+ // ── FFmpeg: YouTube-सुरक्षित ट्रांसकोड ─────────────────────────
59
+ const video = await transcodeForYouTube(
60
+ { inputPath: "input.mp4", outputPath: "output.mp4", preset: "yt-1080p-h264" },
61
+ { signal, userId, notify, createAsset, runFfmpeg, runProbe },
62
+ );
63
+
64
+ // ── Pandoc: डॉक्यूमेंट कन्वर्ज़न ───────────────────────────────
65
+ const doc = await pandoc.convertDocument(
66
+ { inputPath: "thesis.md", outputPath: "thesis.pdf", preset: "academic-pdf" },
67
+ { signal, userId, notify, createAsset, runPandoc, checkInput, assertOutput, statFile },
68
+ );
69
+
70
+ // ── FreeCAD: 3D CAD एक्सपोर्ट ──────────────────────────────────
71
+ const part = await freecad.exportPart(
72
+ { inputPath: "bracket.FCStd", outputPath: "bracket.stl", preset: "stl-print-ready" },
73
+ { signal, userId, notify, createAsset, runFreeCAD, checkInput, assertOutput, statFile },
74
+ );
75
+
76
+ // ── GDAL: भू-स्थानिक ट्रांसफ़ॉर्म ──────────────────────────────
77
+ const geo = await gdal.transformGeo(
78
+ { inputPath: "terrain.tif", outputPath: "terrain_wgs84.tif", preset: "raster-wgs84-tiff" },
79
+ { signal, userId, notify, createAsset, runGDAL, checkInput, assertOutput, statFile },
80
+ );
81
+ ```
82
+
83
+ ## आर्किटेक्चर
84
+
85
+ - **स्कीमा-फ़र्स्ट**: हर इनपुट/आउटपुट के लिए Zod स्कीमा, पूर्ण टाइप-सेफ़
86
+ - **कॉन्टेक्स्ट DI**: सभी साइड इफ़ेक्ट्स कॉन्टेक्स्ट ऑब्जेक्ट्स से इंजेक्ट, 100% मॉक करने योग्य
87
+ - **सैंडबॉक्स आइसोलेशन**: हर फ़ाइल ऑपरेशन पर पाथ ट्रैवर्सल रोकथाम
88
+ - **ऑब्ज़र्वेबल**: हर स्टेज पर टाइप्ड नोटिफ़िकेशन (प्रगति, चेतावनी, तैयार)
89
+ - **रद्दीकरण**: AbortController हर पाइपलाइन चेकपॉइंट तक प्रसारित
90
+ - **फ़ॉलबैक**: प्रीमियम प्रीसेट विफलता पर गारंटीड में स्वचालित डिग्रेड
91
+ - **सुरक्षित निष्पादन**: FreeCAD पूर्व-निर्मित Python वन-लाइनर्स का उपयोग करता है (कोई exec/eval/यूज़र कोड नहीं)
92
+ - **मल्टी-बाइनरी**: GDAL प्रीसेट के अनुसार gdalwarp, ogr2ogr या gdal_translate को डिस्पैच करता है
93
+
94
+ ## Docker
95
+
96
+ ```bash
97
+ docker build -t toolshopstudio .
98
+ docker run -v ./sandbox:/sandbox toolshopstudio
99
+ ```
100
+
101
+ चारों रनटाइम बाइनरी (`ffmpeg`, `pandoc`, `freecad-cmd`, `gdal-bin`) इमेज में प्री-इंस्टॉल्ड हैं।
102
+
103
+ ## विकास
104
+
105
+ ```bash
106
+ npm install # डिपेंडेंसी
107
+ npm run typecheck # tsc --noEmit
108
+ npm test # vitest (114 टेस्ट)
109
+ npm run build # dist/ में कंपाइल
110
+ npm run smoke # एंड-टू-एंड स्मोक (4 टूल्स, 10 टेस्ट)
111
+ ```
112
+
113
+ ## लाइसेंस
114
+
115
+ MIT
package/README.it.md ADDED
@@ -0,0 +1,115 @@
1
+ <p align="center">
2
+ <img src="assets/logo.png" width="400" alt="ToolShopStudio">
3
+ </p>
4
+
5
+ <h1 align="center">ToolShopStudio</h1>
6
+
7
+ <p align="center">
8
+ Un'unica installazione. Quattro strumenti MCP di produzione per creatori.
9
+ </p>
10
+
11
+ <p align="center">
12
+ <a href="README.md">English</a> |
13
+ <a href="README.ja.md">日本語</a> |
14
+ <a href="README.zh.md">中文</a> |
15
+ <a href="README.es.md">Español</a> |
16
+ <a href="README.fr.md">Français</a> |
17
+ <a href="README.hi.md">हिन्दी</a> |
18
+ <strong>Italiano</strong> |
19
+ <a href="README.pt-BR.md">Português</a>
20
+ </p>
21
+
22
+ <p align="center">
23
+ <a href="https://github.com/mcp-tool-shop-org/ToolShopStudio/actions"><img src="https://github.com/mcp-tool-shop-org/ToolShopStudio/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
24
+ <a href="https://www.npmjs.com/package/@mcptoolshop/toolshopstudio"><img src="https://img.shields.io/npm/v/@mcptoolshop/toolshopstudio" alt="npm version"></a>
25
+ <img src="https://img.shields.io/badge/tools-FFmpeg%20%2B%20Pandoc%20%2B%20FreeCAD%20%2B%20GDAL-orange" alt="Tools">
26
+ <img src="https://img.shields.io/badge/tests-114%20passing-brightgreen" alt="Tests">
27
+ <img src="https://img.shields.io/badge/license-MIT-blue" alt="License">
28
+ </p>
29
+
30
+ ---
31
+
32
+ ## Strumenti Inclusi
33
+
34
+ | Strumento | Funzione |
35
+ |-----------|----------|
36
+ | **FFmpeg YouTube MCP** | Preset sicuri per YouTube (garantito + premium con fallback), GOP chiuso, doppia miniatura |
37
+ | **Pandoc MCP** | Conversione documenti senza flag: blog, PDF accademico, ebook, slide, newsletter |
38
+ | **FreeCAD MCP** | Esportazione 3D CAD sicura: STL, STEP, GLB, 3MF, OBJ — headless, nessun codice utente |
39
+ | **GDAL MCP** | Trasformazioni geospaziali: riproiezione raster, conversione vettoriale, ritaglio regioni — l'FFmpeg del GIS |
40
+
41
+ Tutti e quattro gli strumenti condividono la stessa superficie: **schema-first, sandbox, osservabile, DI per contesto, zero argomenti grezzi**.
42
+
43
+ ## Avvio Rapido
44
+
45
+ ```bash
46
+ npm install @mcptoolshop/toolshopstudio
47
+ ```
48
+
49
+ ```typescript
50
+ import {
51
+ transcodeForYouTube,
52
+ createInMemoryCRUD,
53
+ pandoc,
54
+ freecad,
55
+ gdal,
56
+ } from "@mcptoolshop/toolshopstudio";
57
+
58
+ // ── FFmpeg: transcodifica sicura per YouTube ────────────────────
59
+ const video = await transcodeForYouTube(
60
+ { inputPath: "input.mp4", outputPath: "output.mp4", preset: "yt-1080p-h264" },
61
+ { signal, userId, notify, createAsset, runFfmpeg, runProbe },
62
+ );
63
+
64
+ // ── Pandoc: conversione documenti ───────────────────────────────
65
+ const doc = await pandoc.convertDocument(
66
+ { inputPath: "thesis.md", outputPath: "thesis.pdf", preset: "academic-pdf" },
67
+ { signal, userId, notify, createAsset, runPandoc, checkInput, assertOutput, statFile },
68
+ );
69
+
70
+ // ── FreeCAD: esportazione 3D CAD ────────────────────────────────
71
+ const part = await freecad.exportPart(
72
+ { inputPath: "bracket.FCStd", outputPath: "bracket.stl", preset: "stl-print-ready" },
73
+ { signal, userId, notify, createAsset, runFreeCAD, checkInput, assertOutput, statFile },
74
+ );
75
+
76
+ // ── GDAL: trasformazione geospaziale ────────────────────────────
77
+ const geo = await gdal.transformGeo(
78
+ { inputPath: "terrain.tif", outputPath: "terrain_wgs84.tif", preset: "raster-wgs84-tiff" },
79
+ { signal, userId, notify, createAsset, runGDAL, checkInput, assertOutput, statFile },
80
+ );
81
+ ```
82
+
83
+ ## Architettura
84
+
85
+ - **Schema-first**: Schemi Zod per ogni input/output, completamente tipizzato
86
+ - **Context DI**: Tutti gli effetti collaterali iniettati tramite oggetti di contesto, 100% mockabile
87
+ - **Isolamento sandbox**: Prevenzione path traversal su ogni operazione file
88
+ - **Osservabile**: Notifiche tipizzate (progresso, avvertimenti, pronto) ad ogni fase
89
+ - **Cancellazione**: AbortController propagato ad ogni checkpoint della pipeline
90
+ - **Fallback**: I preset premium degradano automaticamente a garantito in caso di errore
91
+ - **Esecuzione sicura**: FreeCAD usa one-liner Python precostituiti (nessun exec/eval/codice utente)
92
+ - **Multi-binario**: GDAL dispatcha verso gdalwarp, ogr2ogr o gdal_translate in base al preset
93
+
94
+ ## Docker
95
+
96
+ ```bash
97
+ docker build -t toolshopstudio .
98
+ docker run -v ./sandbox:/sandbox toolshopstudio
99
+ ```
100
+
101
+ Tutti e quattro i binari (`ffmpeg`, `pandoc`, `freecad-cmd`, `gdal-bin`) sono preinstallati nell'immagine.
102
+
103
+ ## Sviluppo
104
+
105
+ ```bash
106
+ npm install # dipendenze
107
+ npm run typecheck # tsc --noEmit
108
+ npm test # vitest (114 test)
109
+ npm run build # compilare in dist/
110
+ npm run smoke # smoke end-to-end (4 strumenti, 10 test)
111
+ ```
112
+
113
+ ## Licenza
114
+
115
+ MIT
package/README.ja.md ADDED
@@ -0,0 +1,115 @@
1
+ <p align="center">
2
+ <img src="assets/logo.png" width="400" alt="ToolShopStudio">
3
+ </p>
4
+
5
+ <h1 align="center">ToolShopStudio</h1>
6
+
7
+ <p align="center">
8
+ 1回のインストールで、クリエイター向け本番グレードMCPツール4本。
9
+ </p>
10
+
11
+ <p align="center">
12
+ <a href="README.md">English</a> |
13
+ <strong>日本語</strong> |
14
+ <a href="README.zh.md">中文</a> |
15
+ <a href="README.es.md">Español</a> |
16
+ <a href="README.fr.md">Français</a> |
17
+ <a href="README.hi.md">हिन्दी</a> |
18
+ <a href="README.it.md">Italiano</a> |
19
+ <a href="README.pt-BR.md">Português</a>
20
+ </p>
21
+
22
+ <p align="center">
23
+ <a href="https://github.com/mcp-tool-shop-org/ToolShopStudio/actions"><img src="https://github.com/mcp-tool-shop-org/ToolShopStudio/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
24
+ <a href="https://www.npmjs.com/package/@mcptoolshop/toolshopstudio"><img src="https://img.shields.io/npm/v/@mcptoolshop/toolshopstudio" alt="npm version"></a>
25
+ <img src="https://img.shields.io/badge/tools-FFmpeg%20%2B%20Pandoc%20%2B%20FreeCAD%20%2B%20GDAL-orange" alt="Tools">
26
+ <img src="https://img.shields.io/badge/tests-114%20passing-brightgreen" alt="Tests">
27
+ <img src="https://img.shields.io/badge/license-MIT-blue" alt="License">
28
+ </p>
29
+
30
+ ---
31
+
32
+ ## 搭載ツール
33
+
34
+ | ツール | 機能 |
35
+ |--------|------|
36
+ | **FFmpeg YouTube MCP** | YouTube安全プリセット(保証+プレミアム自動フォールバック)、クローズドGOP、デュアルサムネイル |
37
+ | **Pandoc MCP** | フラグ不要のドキュメント変換:ブログ、学術PDF、電子書籍、スライド、ニュースレター |
38
+ | **FreeCAD MCP** | 安全な3D CADエクスポート:STL, STEP, GLB, 3MF, OBJ — ヘッドレス、ユーザーコード不要 |
39
+ | **GDAL MCP** | 地理空間変換:ラスター再投影、ベクター変換、領域クリップ — GISのFFmpeg |
40
+
41
+ 4つのツールすべてが同じ設計原則を共有:**スキーマファースト、サンドボックス化、監視可能、コンテキストDI、生引数なし**。
42
+
43
+ ## クイックスタート
44
+
45
+ ```bash
46
+ npm install @mcptoolshop/toolshopstudio
47
+ ```
48
+
49
+ ```typescript
50
+ import {
51
+ transcodeForYouTube,
52
+ createInMemoryCRUD,
53
+ pandoc,
54
+ freecad,
55
+ gdal,
56
+ } from "@mcptoolshop/toolshopstudio";
57
+
58
+ // ── FFmpeg: YouTube安全トランスコード ──────────────────────────
59
+ const video = await transcodeForYouTube(
60
+ { inputPath: "input.mp4", outputPath: "output.mp4", preset: "yt-1080p-h264" },
61
+ { signal, userId, notify, createAsset, runFfmpeg, runProbe },
62
+ );
63
+
64
+ // ── Pandoc: ドキュメント変換 ─────────────────────────────────────
65
+ const doc = await pandoc.convertDocument(
66
+ { inputPath: "thesis.md", outputPath: "thesis.pdf", preset: "academic-pdf" },
67
+ { signal, userId, notify, createAsset, runPandoc, checkInput, assertOutput, statFile },
68
+ );
69
+
70
+ // ── FreeCAD: 3D CADエクスポート ──────────────────────────────────
71
+ const part = await freecad.exportPart(
72
+ { inputPath: "bracket.FCStd", outputPath: "bracket.stl", preset: "stl-print-ready" },
73
+ { signal, userId, notify, createAsset, runFreeCAD, checkInput, assertOutput, statFile },
74
+ );
75
+
76
+ // ── GDAL: 地理空間変換 ──────────────────────────────────────────
77
+ const geo = await gdal.transformGeo(
78
+ { inputPath: "terrain.tif", outputPath: "terrain_wgs84.tif", preset: "raster-wgs84-tiff" },
79
+ { signal, userId, notify, createAsset, runGDAL, checkInput, assertOutput, statFile },
80
+ );
81
+ ```
82
+
83
+ ## アーキテクチャ
84
+
85
+ - **スキーマファースト**: すべての入出力にZodスキーマ、完全な型安全性
86
+ - **コンテキストDI**: すべての副作用をコンテキストオブジェクトで注入、100%モック可能
87
+ - **サンドボックス分離**: すべてのファイル操作でパストラバーサル防止
88
+ - **監視可能**: すべてのステージで型付き通知(進捗、警告、完了)
89
+ - **キャンセル対応**: AbortControllerをパイプラインの全チェックポイントに伝播
90
+ - **フォールバック**: プレミアムプリセットは失敗時に保証プリセットに自動降格
91
+ - **安全な実行**: FreeCADは事前構築されたPythonワンライナーを使用(exec/eval/ユーザーコードなし)
92
+ - **マルチバイナリ**: GDALはプリセットごとにgdalwarp, ogr2ogr, gdal_translateに振り分け
93
+
94
+ ## Docker
95
+
96
+ ```bash
97
+ docker build -t toolshopstudio .
98
+ docker run -v ./sandbox:/sandbox toolshopstudio
99
+ ```
100
+
101
+ 4つのランタイムバイナリ(`ffmpeg`, `pandoc`, `freecad-cmd`, `gdal-bin`)がイメージにプリインストール済み。
102
+
103
+ ## 開発
104
+
105
+ ```bash
106
+ npm install # 依存関係
107
+ npm run typecheck # tsc --noEmit
108
+ npm test # vitest(114テスト)
109
+ npm run build # dist/にコンパイル
110
+ npm run smoke # エンドツーエンドスモーク(4ツール全10テスト)
111
+ ```
112
+
113
+ ## ライセンス
114
+
115
+ MIT