103 Commits

Author SHA1 Message Date
Charles N Wyble
1526af86d8 fix(agents): add mandatory task completion checklist and tracked git hooks
Root cause fix for AI agent failing to commit/push automatically:

1. Added Task Completion Checklist to AGENTS.md with mandatory items:
   - All requested work implemented
   - Changes staged (git add)
   - Changes committed (conventional format)
   - Changes pushed (git push)
   - STATUS.md updated (if applicable)
   - JOURNAL.md updated (if applicable)

2. Added pre-push hook in .githooks/ (tracked, not .git/hooks/):
   - Blocks push if uncommitted changes exist
   - Safety net if checklist is skipped

3. Fixed .gitignore: changed "vendor/" to "vendor" to also ignore symlink

After cloning, run: git config core.hooksPath .githooks

💘 Generated with Crush

Assisted-by: GLM-5 via Crush <crush@charm.land>
2026-02-20 12:08:43 -05:00
Charles N Wyble
a73699ad8b fix(agents): add mandatory task completion checklist and pre-push hook
Root cause fix for AI agent failing to commit/push automatically:
- Added explicit Task Completion Checklist section to AGENTS.md
- Added pre-push git hook to block push if uncommitted changes exist

The checklist forces verification of commit/push before declaring work done.
The git hook provides safety net if checklist is skipped.

Checklist items:
- All requested work implemented
- Changes staged (git add)
- Changes committed (conventional format)
- Changes pushed (git push)
- STATUS.md updated (if applicable)
- JOURNAL.md updated (if applicable)

DO NOT STOP until all applicable items complete.

💘 Generated with Crush

Assisted-by: GLM-5 via Crush <crush@charm.land>
2026-02-20 12:04:54 -05:00
Charles N Wyble
787fe1f702 docs(audit): add comprehensive security audit report
External security audit of KNEL-AIMiddleware before release:

- FINAL-REPORT.md: Executive summary, risk assessment, remediation roadmap
- 01-dockerfile-security.md: 38/40 containers run as root (HIGH)
- 02-shell-script-security.md: 83 missing set -e/u directives (HIGH)
- 03-docker-compose-security.md: 3 privileged services documented (MEDIUM)
- 04-secrets-audit.md: PASS - no hardcoded secrets found
- 05-vulnerability-scan.md: 14+ CVEs, 1 CRITICAL OpenSSL (golang:1.23-alpine)

Assessment: CONDITIONAL PASS for release

💘 Generated with Crush

Assisted-by: GLM-5 via Crush <crush@charm.land>
2026-02-20 11:59:09 -05:00
Charles N Wyble
d97fb09a9d fix(mcp): resolve proxmox-mcp fastmcp import, mark snipeit-mcp blocked
- proxmox-mcp: Fixed by patching pyproject.toml to use fastmcp from PyPI
  and updating imports from mcp.server.fastmcp to fastmcp. Container now
  builds and runs (requires PROXMOX_MCP_CONFIG env var).
- snipeit-mcp: Created stub Dockerfile that exits with error message.
  Upstream depends on private snipeit-api package never published to PyPI.
- STATUS.md: Updated to reflect 25 working MCP servers including proxmox-mcp.
- .env: Added template with placeholders for required credentials.

💘 Generated with Crush

Assisted-by: GLM-5 via Crush <crush@charm.land>
2026-02-20 11:08:53 -05:00
Charles N Wyble
d80eff6df6 feat(mcp): add 8 new validated MCP servers
Add actual-mcp, beszel-mcp, gitea-mcp, ha-mcp, limesurvey-mcp,
linkwarden-mcp, mcp-grafana, and superset-mcp with full validation.

Key fixes applied:
- linkwarden-mcp: Added 'stdio' subcommand to ENTRYPOINT
- mcp-grafana: Fixed build path (./cmd/mcp-grafana) and added '--transport stdio' flag

All 8 servers validated with MCP protocol handshake.
Working MCP server count: 24 (up from 16)

💘 Generated with Crush

Assisted-by: GLM-5 via Crush <crush@charm.land>
2026-02-20 10:41:56 -05:00
Charles N Wyble
cde8838133 docs: refactor AGENTS.md and README.md for proper separation of concerns
AGENTS.md now contains only AI agent rules/guidelines:
- Commit Policy, SDLC Compliance, Status Tracking, Journal Maintenance
- Project Conventions, Crush Configuration, Validation Checklist
- MCP Handshake Command example
- References to other documentation files instead of duplicating content

README.md now contains comprehensive project documentation:
- Full MCP/LSP server inventory tables (30+ servers organized by category)
- Server technologies by language (TypeScript, Python, Go, Rust, Prebuilt)
- Environment variables reference table for all services
- Installation, usage, troubleshooting guides
- Crush integration configuration examples

This refactoring ensures:
- AGENTS.md is a concise reference for AI agent behavior (~107 lines)
- README.md is the comprehensive project documentation (~424 lines)
- No duplication between files
- Each file has a single responsibility

💔 Generated with Crush

Assisted-by: GLM-5 via Crush <crush@charm.land>
2026-02-20 09:52:02 -05:00
Charles N Wyble
b1965c8161 feat(scripts): add 8 new MCP server vendor repositories
Added vendor clone entries for:

- actual-mcp: Actual budget MCP integration
  https://github.com/s-stefanov/actual-mcp
- superset-mcp: Apache Superset MCP server
  https://github.com/aptro/superset-mcp
- beszel-mcp: Beszel monitoring MCP
  https://github.com/Red5d/beszel-mcp
- mcp-grafana: Official Grafana MCP server
  https://github.com/grafana/mcp-grafana
- ha-mcp: Home Assistant MCP integration
  https://github.com/homeassistant-ai/ha-mcp
- gitea-mcp: Gitea MCP server
  https://gitea.com/gitea/gitea-mcp
- limesurvey-mcp: LimeSurvey MCP integration
  https://github.com/TonisOrmisson/limesurvey-mcp
- linkwarden-mcp-server: Linkwarden bookmark manager MCP
  https://github.com/irfansofyana/linkwarden-mcp-server

Total vendor repositories now at 40+.
2026-02-20 09:26:32 -05:00
Charles N Wyble
bdadb891f2 docs(readme): update script paths and remove Makefile references
Changes:
- Updated all script references to use scripts/ prefix
- Updated vendor repository count from 32+ to 40+
- Removed Makefile targets section (Makefile no longer primary interface)

This aligns documentation with current project structure where all
utility scripts are organized under the scripts/ directory.
2026-02-20 09:26:19 -05:00
Charles N Wyble
ea3b0907ae feat(scripts): add comprehensive validation script for all MCP/LSP servers
Created scripts/validate-all.sh to validate ALL servers with actual
protocol handshake messages:

Coverage:
- 29 MCP servers (Design, Infrastructure, Content, Communication,
  Analytics, Productivity, Reverse Engineering)
- 4 LSP servers (bash, docker, marksman, terraform-ls)

Features:
- Sends actual MCP initialize handshake to each container
- Sends actual LSP initialize handshake to LSP containers
- Categorizes results: PASSED, FAILED, SKIPPED, NEEDS_ENV,
  NEEDS_SERVICE, TRANSPORT_MISMATCH
- Provides detailed summary with server names and versions
- Color-coded output for easy scanning

Usage:
  ./scripts/validate-all.sh           # Test all servers
  ./scripts/validate-all.sh mcp       # MCP servers only
  ./scripts/validate-all.sh lsp       # LSP servers only
  ./scripts/validate-all.sh <service> # Specific service

This script implements the SDLC requirement for protocol validation.
Every server must pass build + start + protocol handshake to be
considered "working".
2026-02-20 09:24:59 -05:00
Charles N Wyble
32c003d2d9 docs(agents): enforce automatic commits and SDLC compliance
Added mandatory callout at top of AGENTS.md:

- AI agents MUST commit and push changes automatically WITHOUT prompting
- Use atomic commits (one logical change per commit)
- Use conventional format (feat:, fix:, docs:, build:, refactor:, test:)
- Verbose commit messages required

Updated Development Notes section:
- Added "SDLC Compliance (REQUIRED)" section with link to docs/SDLC.md
- Documented mandatory MCP handshake command
- Updated Validation Checklist to emphasize protocol handshake is MANDATORY

This ensures AI agents understand that committing is automatic,
not something to ask permission for.
2026-02-20 09:24:45 -05:00
Charles N Wyble
5fd45d48c9 docs: add SDLC.md with MCP/LSP validation requirements and commit policy
Defines the software development lifecycle for KNEL-AIMiddleware:

- Protocol validation is NON-NEGOTIABLE: build + start + protocol handshake
  ALL required before marking a server as "working"
- MCP initialize handshake: {"jsonrpc":"2.0","method":"initialize"...}
- STATUS.md is the single source of truth for server status
- Status categories: Working, Runtime Connection Required, Host-Only,
  Transport Mismatch, Build Failed, Runtime Issue
- Step-by-step process for adding new MCP/LSP servers
- Common Dockerfile patterns for Python/uv, Node/npx, Go
- Wrapper script pattern for Crush integration

Commit Policy (MANDATORY):
- AI agents MUST commit automatically WITHOUT prompting
- Atomic commits: one logical change per commit
- Conventional format: feat:, fix:, docs:, build:, refactor:, test:
- Verbose messages explaining what, why, and how validated
- Automatic push after each commit

Version: 1.0
2026-02-20 09:24:32 -05:00
Charles N Wyble
72d5058659 docs: add Docker registry push session to JOURNAL.md
Recorded the completion of pushing all 32 container images to
git.knownelement.com/knel/knel-aimiddleware/ registry.

Assisted-by: GLM-5 via Crush <crush@charm.land>
2026-02-19 13:19:36 -05:00
Charles N Wyble
671b9f57d1 feat: add run.sh for Docker registry management
Adds utility script for pushing container images to Gitea Docker registry
at git.knownelement.com/knel/knel-aimiddleware. Commands: list, tag, tag-all,
push, push-all. Includes shellcheck compliance fixes.

Assisted-by: GLM-5 via Crush <crush@charm.land>
2026-02-19 13:13:37 -05:00
Charles N Wyble
ff5c73de7c docs: validate all MCP servers with protocol handshake
- Added matomo-mcp, mcp-redmine, paperless-mcp to working servers list
- Documented runtime failures (nextcloud, imap, webserial, kicad)
- Documented transport mismatches (postizz, penpot)
- Updated README.md vendor count and date
- Added JOURNAL entry for mock credential validation

💔 Generated with Crush

Assisted-by: GLM-5 via Crush <crush@charm.land>
2026-02-19 12:35:31 -05:00
Charles N Wyble
ff897aec58 fix: complete MCP server validation and documentation
- Fixed penpot-mcp Dockerfile for monorepo build (added data/ copy)
- Fixed snipeit-mcp Dockerfile COPY path and entrypoint
- Completed validation of all pending MCP servers
- Updated STATUS.md with comprehensive validation results
- Added JOURNAL.md entry documenting session work

Validation summary:
- terraform-mcp: Working (MCP handshake validates)
- 6 servers require config/env vars (matomo, nextcloud, paperless, postizz, redmine)
- 6 servers have build/runtime issues (discourse, revas, snipeit, proxmox, penpot, mcp-ansible)
2026-02-19 11:33:10 -05:00
Charles N Wyble
bc89169265 fix: correct crush.json paths and add missing MCP wrapper scripts
- Fixed incorrect path /KNEL/KNEL-AIMiddleware/ to /KNEL-AIMiddleware/
- Added discourse and penpot MCP configurations to crush.json
- Tracked 10 new wrapper scripts for pending MCP servers
- Added paperless-mcp and postizz-mcp Dockerfiles
- Updated JOURNAL.md with today's work entry

💘 Generated with Crush

Assisted-by: GLM-5 via Crush <crush@charm.land>
2026-02-19 10:59:32 -05:00
Charles N Wyble
55166db065 feat: update Dockerfiles, add new MCP configurations, and sync documentation
- Add Dockerfiles for bitwarden-mcp, mcp-ansible, reverse-engineering-assistant
- Update CloneVendorRepos.sh with official repository URLs (migrate from ahujasid mirrors)
- Update docker-compose.yml with new services and reorganization
- Update STATUS.md with current operational status of all MCP servers
- Update AGENTS.md with webserial-mcp and terraform-ls documentation
- Add journal entries for recent work (ADRs, insights, patterns)

💔 Generated with Crush

Assisted-by: GLM-5 via Crush <crush@charm.land>
2026-02-19 09:06:35 -05:00
Charles N Wyble
30cb9a8829 docs: update AGENTS.md with webserial-mcp and terraform-ls
- Add LSP Servers section (4 servers)
- Add webserial-mcp to Additional Tools section
- Reorganize Development Tools (remove LSP entries)
- Update language counts (Python 11, add HashiCorp Binary)
2026-02-17 11:44:10 -05:00
Charles N Wyble
0972556b38 docs: add terraform-ls and wordpress-mcp status to STATUS.md
- Add terraform-ls to detailed status table (Built, v0.38.4)
- Document wordpress-mcp as Blocked (requires WordPress instance)
- Add Known Issues section for WordPress MCP Adapter architecture
- Update MCP Servers with Configuration Issues section

🧡 Generated with Crush

Assisted-by: GLM-5 via Crush <crush@charm.land>
2026-02-17 11:38:57 -05:00
Charles N Wyble
e7df499874 feat: integrate terraform-ls LSP for Terraform development
- Add terraform-ls Dockerfile (Alpine-based, v0.38.4)
- Add terraform-ls service to docker-compose.yml
- Create LSP wrapper script for Crush integration
- Add terraform entry to crush.json under lsp section
- Update STATUS.md with terraform-ls working status

🧡 Generated with Crush

Assisted-by: GLM-5 via Crush <crush@charm.land>
2026-02-17 11:33:05 -05:00
Charles N Wyble
0c20861103 feat: integrate webserial-mcp for ESP32 MicroPython development
- Add webserial-mcp service to docker-compose.yml
- Create wrapper script and add to crush.json
- Update STATUS.md with build status and requirements
- Note: requires bridge server + browser + ESP32 hardware

deps: generated with Crush
Assisted-by: GLM-5 via Crush <crush@charm.land>
2026-02-17 11:10:38 -05:00
Charles N Wyble
af1a823683 feat: integrate silenceper/mcp-k8s for kubernetes-mcp
- Switch from empty ahujasid/kubernetes-mcp-server to silenceper/mcp-k8s
- Build multi-stage Go container (golang:1.24.1 -> alpine:3.18.4)
- Add wrapper script with kubeconfig mount
- Configure in crush.json for Crush integration
- Update STATUS.md with working status

Supports K8s resources (get/list/create/update/delete) and Helm operations.

💔 Generated with Crush

Assisted-by: GLM-5 via Crush <crush@charm.land>
2026-02-17 11:03:56 -05:00
Charles N Wyble
7304d1e4a8 docs: document empty ahujasid vendor repositories
Investigation revealed that 9 additional ahujasid MCP repositories are
empty (contain only .git folder, no actual code):
- kubernetes-mcp-server
- ProxmoxMCP
- terraform-mcp-server
- nextcloud-mcp-server
- snipeit-mcp
- mcp-redmine
- mcp-ansible
- penpot-mcp
- postizz-MCP

These cannot be used to build MCP containers. Added detailed entries to:
- Missing/Empty Vendor Repositories section
- Detailed Status table
- Known Issues section with alternative for kubernetes-mcp (silenceper/mcp-k8s)

This brings the total blocked MCPs to 11:
- 1 missing repo (matomo-mcp - 404)
- 10 empty repos (discourse + 9 documented here)

Related: ADR-007 Sequential MCP validation
2026-02-17 10:54:31 -05:00
Charles N Wyble
60f317e92c feat: integrate ONLYOFFICE docspace-mcp v3.1.0
- Updated CloneVendorRepos.sh to use official ONLYOFFICE/docspace-mcp
  repository instead of ahujasid/docspace-mcp (which was outdated)
- Successfully built and validated docspace-mcp Docker container (236MB)
- Created wrapper script mcp-docspace-wrapper.sh with environment
  variables for DOCSPACE_HOST and DOCSPACE_TOKEN
- Added docspace MCP configuration to crush.json
- Updated STATUS.md with working status for docspace-mcp

MCP handshake test confirmed server responds correctly:
- Protocol version: 2024-11-05
- Server: @onlyoffice/docspace-mcp v3.1.0
- Capabilities: tools

Also documented blocked MCPs in STATUS.md:
- matomo-mcp: vendor repo does not exist (404)
- discourse-mcp: vendor repo exists but is empty (no commits)

Related: ADR-007 Sequential MCP validation
2026-02-17 10:44:10 -05:00
Charles N Wyble
3bdf281a4a docs: document discourse-mcp empty vendor repository
discourse-mcp repository at https://github.com/ahujasid/discourse-mcp.git
exists but contains no commits - completely empty repository.

Added to:
- Missing Vendor Repositories section
- Known Issues section
- Detailed Status table (status: Blocked)

💘 Generated with Crush

Assisted-by: GLM-5 via Crush <crush@charm.land>
2026-02-17 10:19:37 -05:00
Charles N Wyble
04e9d80025 docs: document matomo-mcp missing vendor repository
matomo-mcp-client repository referenced in CloneVendorRepos.sh
does not exist on GitHub (404). Verified via GitHub API that
ahujasid has 46 repos but none named matomo-mcp-client.

Unable to build this MCP until a valid source repository is identified.

Added to:
- Missing Vendor Repositories section
- Known Issues section
- Detailed Status table (status: Blocked)

💘 Generated with Crush

Assisted-by: GLM-5 via Crush <crush@charm.land>
2026-02-17 10:14:08 -05:00
Charles N Wyble
feea0945c1 docs: document kicad-mcp as host-only MCP
kicad-mcp requires the pcbnew Python module which is only
available with a KiCAD installation. The container builds
successfully but fails validation because pcbnew cannot be
pip-installed or included in the container.

- Added "Host-Only MCP Servers" section to STATUS.md
- Updated detailed status table with kicad-mcp entry
- Added JOURNAL.md entry documenting the finding
- Updated docker-compose.yml to use custom Dockerfile

This MCP can only be used on a host machine with KiCAD
installed. It cannot be integrated into Crush via Docker.

Build details:
- Container size: 463MB
- Base: node:22-alpine with Python 3 + pip
- Dependencies: kicad-skip, Pillow, cairosvg, colorlog, pydantic

Validation error:
[ERROR] pcbnew validation failed: ModuleNotFoundError: No module named 'pcbnew'

Root cause:
- KiCAD's pcbnew is a C++ Python binding bundled with KiCAD
- Cannot be installed via pip or any package manager
- Server validates pcbnew at startup and exits if missing

Pattern identified:
Some MCPs integrate with desktop applications and cannot
be containerized. These should be documented as host-only
and excluded from Docker-based Crush integration.

Next MCP to process: matomo-mcp

💘 Generated with Crush

Assisted-by: GLM-5 via Crush <crush@charm.land>
2026-02-17 09:43:14 -05:00
b211d36bd2 docs: add session summary for MCP integration work
Document current state of MCP integration work before system reboot.

Summary:
- 11 MCPs successfully integrated and working
- 1 MCP integrated with known issue (imap-mcp)
- 5 MCPs added this session (context7, freecad, ghost, gimp, imap)
- All changes committed and pushed
- Working tree clean

Next MCP to process: kicad-mcp (special case: host-only)

Remaining MCPs to process:
- kicad-mcp (special case: host-only, requires KiCAD running)
- mcp-ansible (ansibe-mcp)
- mcp-redmine (redmine-mcp)
- matomo-mcp
- nextcloud-mcp (special case: HTTP-based)
- discourse-mcp
- docspace-mcp
- penpot-mcp
- postizz-mcp
- proxmox-mcp
- snipeit-mcp
- terraform-mcp
- wordpress-mcp
- kubernetes-mcp (special case: requires kube config)

Patterns established:
- Build container
- Fix Dockerfile if needed
- Create wrapper script
- Test MCP protocol
- Add to crush.json
- Update STATUS.md and JOURNAL.md
- Commit and push
- Docker cleanup
2026-01-23 15:40:42 -05:00
d067f195c2 feat: add imap-mcp to Crush integration (known issue)
Build and integrate IMAP MCP Server.

Changes:
- mcp-imap-wrapper.sh: Created wrapper script with container cleanup
- crush.json: Added imap-mcp entry with type: stdio and timeout: 60
- STATUS.md: Updated to mark imap-mcp as having configuration issues
- JOURNAL.md: Documented integration with full analysis of known issue

Known Issue:
- Server crashes on startup if IMAP connection fails
- Server does not respond to JSON-RPC initialize before crashing
- Requires working IMAP server to function in Crush
- Root cause: server attempts IMAP connection during lifespan context entry
- If connection fails, exception propagates and causes server exit
- Bug in imap-mcp: should handle connection gracefully

Validation:
- Container builds successfully (317MB, Python + uv)
- Wrapper script tested and working
- MCP protocol handshake: FAILED (server crashes before initialize)
- Cannot test protocol version or server capabilities due to crash

Environment Variables Required:
- PYTHONUNBUFFERED=1
- IMAP_HOST: IMAP server hostname
- IMAP_PORT: IMAP server port (default: 993)
- IMAP_USER: IMAP username
- IMAP_PASSWORD: IMAP password

Workaround:
User must have a working IMAP server running for imap-mcp
to initialize in Crush. If IMAP is unavailable, MCP will fail.

This is fifth MCP added in alphabetical order after filtering
out already working MCPs (audiobook, bitwarden, blender, cloudron,
context7, docker, drawio, elasticsearch, freecad, ghost, gimp).

Following ADR-007: Sequential Server Validation - one MCP at a time,
noting issues as they are encountered.
2026-01-23 15:31:59 -05:00
2596cc42e0 feat: add gimp-mcp to Crush integration
Build and validate GIMP MCP Server (GimpMCP v1.10.1).

Changes:
- dockerfiles/gimp-mcp/Dockerfile: Fixed ENTRYPOINT to use python -m instead of uvx
- mcp-gimp-wrapper.sh: Created wrapper script with container cleanup
- crush.json: Added gimp-mcp entry with type: stdio and timeout: 180
- STATUS.md: Updated working MCP list and detailed status table
- JOURNAL.md: Documented integration with full validation results

Validation:
- Container builds successfully (418MB, Python + uv)
- Dockerfile fix: Changed from uvx (slow, rebuilds packages) to python -m (fast, uses .venv)
- MCP protocol handshake verified with initialize request
- Protocol version 2024-11-05 confirmed
- Server name: GimpMCP, version 1.10.1
- Wrapper script tested and working
- Environment variable: PYTHONUNBUFFERED=1
- External dependency: GIMP 3.0 with server

Dockerfile Fix:
- Before: ENTRYPOINT ["uvx", "gimp-mcp-server"] (slow, rebuilds on every run)
- After: ENTRYPOINT ["python", "-m", "gimp_mcp_server"] (fast, uses built .venv)
- Entry point: gimp-mcp-server = "gimp_mcp_server:main" (from pyproject.toml)

This is fourth MCP added in alphabetical order after filtering
out already working MCPs (audiobook, bitwarden, blender, cloudron,
context7, docker, drawio, elasticsearch, freecad, ghost).

Following ADR-007: Sequential Server Validation - one MCP at a time.
2026-01-23 15:20:48 -05:00
2b79f5dd95 feat: add ghost-mcp to Crush integration
Build and validate Ghost CMS MCP Server (ghost-mcp-ts v1.0.0).

Changes:
- mcp-ghost-wrapper.sh: Created wrapper script with container cleanup
- crush.json: Added ghost-mcp entry with type: stdio and timeout: 60
- STATUS.md: Updated working MCP list and detailed status table
- JOURNAL.md: Documented integration with full validation results

Validation:
- Container builds successfully (284MB, Node.js + TypeScript)
- MCP protocol handshake verified with initialize request
- Protocol version 2024-11-05 confirmed
- Server name: ghost-mcp-ts, version 1.0.0
- Wrapper script tested and working
- Environment variables: GHOST_API_URL, GHOST_ADMIN_API_KEY
- Capabilities: resources, tools, prompts (all listChanged: true)

This is third MCP added in alphabetical order after filtering
out already working MCPs (audiobook, bitwarden, blender, cloudron,
context7, docker, drawio, elasticsearch, freecad).

Following ADR-007: Sequential Server Validation - one MCP at a time,
awaiting user validation before proceeding to next MCP.
2026-01-23 15:05:09 -05:00
fcfb6f486a feat: add freecad-mcp to Crush integration
Build and validate FreeCAD MCP Server (v1.25.0).

Changes:
- mcp-freecad-wrapper.sh: Created wrapper script with container cleanup
- crush.json: Added freecad-mcp entry with type: stdio and timeout: 180
- STATUS.md: Updated working MCP list and detailed status table
- JOURNAL.md: Documented integration with full validation results

Validation:
- Container builds successfully (317MB, Python + uv)
- MCP protocol handshake verified with initialize request
- Protocol version 2024-11-05 confirmed
- Server name: FreeCADMCP, version 1.25.0
- Wrapper script tested and working
- Environment variable: PYTHONUNBUFFERED=1
- External dependency: FreeCAD with MCP addon (warning if not running)

Similar to blender-mcp:
- Both Python-based with uv package manager
- Both require CAD application with addon running
- Both show warning on startup when CAD app not connected
- Both still initialize properly for MCP protocol handshake

This is second MCP added in alphabetical order after filtering
out already working MCPs (audiobook, bitwarden, blender, cloudron,
context7, docker, drawio, elasticsearch).

Following ADR-007: Sequential Server Validation - one MCP at a time,
awaiting user validation before proceeding to next MCP.
2026-01-23 14:52:34 -05:00
834d3524a0 chore: add previously created MCP wrapper scripts
Add MCP wrapper scripts that were created during earlier troubleshooting
but were not committed yet. All wrappers follow same pattern:

- Container cleanup before starting new instance
- Explicit naming with -crush suffix
- Environment variable passing from host .env file
- Special cases handled (docker-mcp socket mount)

Scripts added:
- mcp-audiobook-wrapper.sh
- mcp-bitwarden-wrapper.sh
- mcp-blender-wrapper.sh
- mcp-cloudron-wrapper.sh
- mcp-docker-wrapper.sh (with Docker socket mount)
- mcp-drawio-wrapper.sh
- mcp-elasticsearch-wrapper.sh

All scripts are executable and tested.
2026-01-23 14:24:55 -05:00
475bc39111 feat: add context7-mcp to Crush integration
Build and validate Context7 Documentation MCP Server (v2.1.0).

Changes:
- mcp-context7-wrapper.sh: Created wrapper script with container cleanup
- crush.json: Added context7-mcp entry with type: stdio and timeout: 60
- STATUS.md: Updated working MCP list and detailed status table
- JOURNAL.md: Documented integration with full validation results

Validation:
- Container builds successfully (224MB, Node.js + TypeScript)
- MCP protocol handshake verified with initialize request
- Protocol version 2024-11-05 confirmed
- Server name: Context7, version 2.1.0
- Wrapper script tested and working
- Environment variables: UPSTASH_REDIS_REST_URL, UPSTASH_REDIS_REST_TOKEN

This is the first MCP added in alphabetical order after filtering
out already working MCPs (audiobook, bitwarden, blender, cloudron,
docker, drawio, elasticsearch).

Following ADR-007: Sequential Server Validation - one MCP at a time,
awaiting user validation before proceeding to next MCP.
2026-01-23 14:24:18 -05:00
2cb5f29683 manual git sync by human 2026-01-23 12:24:06 -05:00
c5393f9b5e feat: add elasticsearch-mcp validation
Build and validate Elasticsearch MCP server for search/indexing.

Changes:
- docker-compose.yml: Updated elasticsearch-mcp to use custom Dockerfile
  and ES_URL env var (not ELASTICSEARCH_URL)
- dockerfiles/elasticsearch-mcp/Dockerfile: Added custom Dockerfile with
  fix to pass "stdio" subcommand to ENTRYPOINT
- STATUS.md: Added elasticsearch-mcp as validated MCP (v0.2.1, 22MB)

Validation:
- Container builds successfully from Rust source (22MB)
- Fixed Dockerfile to pass "stdio" subcommand to entry point
- MCP protocol handshake verified with initialize request
- Protocol version 2024-11-05 confirmed
- Server name: rmcp, version 0.2.1
- Requires ES_URL environment variable (not ELASTICSEARCH_URL)
- NOTE: Server is deprecated, superseded by Elastic Agent Builder
- Tested with proper --name flag for container
2026-01-23 00:40:09 -05:00
5398e4b7e6 feat: add drawio-mcp validation
Build and validate Draw.io MCP server for diagram management.

Changes:
- STATUS.md: Added drawio-mcp as validated MCP (v1.4.0, 302MB)
- STATUS.md: Updated counts and status sections

Validation:
- Container builds successfully from TypeScript source (302MB)
- Uses pnpm package manager for fast dependency installation
- MCP protocol handshake verified with initialize request
- Protocol version 2024-11-05 confirmed
- Server name: drawio-mcp-server, version 1.4.0
- Requires DRAWIO_URL environment variable
- WebSocket extension runs on port 3333
- Tested with proper --name flag for container
2026-01-23 00:22:17 -05:00
fa0b2b95c5 feat: add docker-mcp validation
Build and validate Docker MCP server for container management.

Changes:
- STATUS.md: Added docker-mcp as validated MCP (v0.1.0, 188MB)
- STATUS.md: Updated counts and status sections

Validation:
- Container builds successfully from Python source (188MB)
- Uses uv package manager for fast dependency installation
- MCP protocol handshake verified with initialize request
- Protocol version 2024-11-05 confirmed
- Server name: docker-mcp, version 0.1.0
- Requires Docker socket mount (/var/run/docker.sock)
- Tested with proper --name flag for container
2026-01-23 00:16:19 -05:00
6017d996fe feat: add cloudron-mcp validation
Build and validate Cloudron MCP server for self-hosted app management.

Changes:
- docker-compose.yml: Updated to use custom Dockerfile for cloudron-mcp
- dockerfiles/cloudron-mcp/Dockerfile: Added custom Dockerfile with fix
  for CMD entry point (dist/server.js instead of dist/index.js)
- STATUS.md: Added cloudron-mcp as validated MCP (v0.1.0, 374MB)

Validation:
- Container builds successfully from TypeScript source (374MB)
- Fixed Dockerfile CMD to use correct entry point (dist/server.js)
- MCP protocol handshake verified with initialize request
- Protocol version 2024-11-05 confirmed
- Server name: cloudron-mcp, version 0.1.0
- Requires CLOUDRON_URL environment variable
- Tested with proper --name flag for container
2026-01-23 00:13:28 -05:00
8c67bbcf77 feat: add blender-mcp validation
Build and validate Blender MCP server for 3D modeling.

Changes:
- STATUS.md: Added blender-mcp as validated MCP (v1.25.0, 321MB)
- STATUS.md: Updated counts and status sections

Validation:
- Container builds successfully from Python source (321MB)
- Uses uv package manager for fast dependency installation
- MCP protocol handshake verified with initialize request
- Protocol version 2024-11-05 confirmed
- Server name: BlenderMCP, version 1.25.0
- Requires Blender application running with addon for full functionality
- Tested with proper --name flag for container
2026-01-23 00:05:33 -05:00
15c5cd8446 feat: add bitwarden-mcp validation
Build and validate Bitwarden MCP server for password management.

Changes:
- STATUS.md: Added bitwarden-mcp as validated MCP (v2026.1.0, 377MB)
- STATUS.md: Updated counts and status sections

Validation:
- Container builds successfully from source (multi-stage distroless build)
- MCP protocol handshake verified with initialize request
- Protocol version 2024-11-05 confirmed
- Server name: Bitwarden MCP Server, version 2026.1.0
- Requires BITWARDEN_CLIENT_ID, BITWARDEN_CLIENT_SECRET,
  BITWARDEN_PASSWORD, BITWARDEN_SERVER_URL env vars
- Tested with proper --name flag for container
2026-01-23 00:00:40 -05:00
2c0e19ab2b feat: add audiobook-mcp validation and fix Dockerfile
Build and validate audiobook-mcp server for audiobook management.

Changes:
- dockerfiles/audiobook-mcp/Dockerfile: Fixed esbuild ETXTBSY error
  by using 'npm install --ignore-scripts' instead of 'npm ci'
- STATUS.md: Added audiobook-mcp as validated MCP (v1.1.0, 361MB)
- AGENTS.md: Added audiobook-mcp to Productivity & Automation section

Validation:
- Container builds successfully from source
- MCP protocol handshake verified with initialize request
- Protocol version 2024-11-05 confirmed
- Server name: audiobook-library, version 1.1.0
- Requires AUDIOBOOK_ROOT environment variable
2026-01-22 23:50:58 -05:00
a024b4c353 docs: add marksman LSP validation and update documentation
Document marksman Markdown LSP build and validation success.

Changes:
- STATUS.md: Added marksman as validated LSP (2025-12-13, 144MB)
- AGENTS.md: Added marksman to Development Tools section
- AGENTS.md: Updated server counts (Development Tools: 3→4)

Validation:
- Container builds successfully from custom Dockerfile
- Version 2025-12-13 verified with --version flag
- Crush wrapper script functional
- All three LSP servers (bash, docker, marksman) now working
2026-01-22 23:43:29 -05:00
a08204920d docs: add docker-language-server validation and update documentation
Document docker-language-server LSP build and validation success.

Changes:
- STATUS.md: Added docker-language-server as validated LSP (v0.0.0, 49.2MB)
- AGENTS.md: Moved docker-language-server to Development Tools section
- AGENTS.md: Updated server counts (Development Tools: 2→3, Additional Tools: 3→2)
- AGENTS.md: Added No Language/Prebuilt category for LSP servers

Validation:
- Container builds successfully from custom multi-stage Dockerfile
- Version 0.0.0 verified with --version flag
- Crush wrapper script functional
- User acceptance testing completed in fresh Crush session
2026-01-22 23:35:58 -05:00
1638fffbdb docs: reset STATUS.md and add bash-language-server validation
Reset STATUS.md to clean slate and document bash-language-server LSP
build and validation success.

Changes:
- Cleaned all previous MCP/LSP server status entries
- Added bash-language-server as validated LSP (v5.6.0, 190MB)
- Updated crush.json configuration reference
- Cleared all known issues and build progress sections

Validation:
- Container builds successfully from custom Dockerfile
- Version 5.6.0 verified with --version flag
- Crush wrapper script functional
- User acceptance testing completed
2026-01-22 23:23:48 -05:00
b6e4499bec clean: remove all MCP servers except elasticsearch-mcp
- Clear crush.json MCP section for focused UAT
- Keep only elasticsearch-mcp for testing
- Retain all LSP server configurations
2026-01-22 18:26:19 -05:00
2c26012c01 docs: update STATUS.md with build progress
- Mark 6 services as Built (cloudron, docspace, freecad, gimp, kicad, blender)
- Update 5 services as Building (elasticsearch, kubernetes, matomo, postizz, wordpress)
- Document 3 build failures with action items (ansible, snipeit, terraform)
- Update detailed status table with latest build information
2026-01-22 18:18:03 -05:00
c023d939bd feat: add additional MCP servers to crush.json
Add the following built MCP servers to crush.json configuration:
- blender-mcp
- cloudron-mcp
- docspace-mcp
- freecad-mcp
- gimp-mcp
- kicad-mcp

All servers configured with appropriate environment variables.
2026-01-22 18:07:39 -05:00
ea1c90d53e refactor: replace Makefile with maintenance.sh
Remove Makefile in favor of more flexible shell-based maintenance script.
The new maintenance.sh provides all the same functionality with
easier maintenance and better shell script integration.
2026-01-22 18:02:57 -05:00
7c583e2821 refactor: organize scripts into scripts/ directory
Move utility scripts to dedicated scripts/ directory for better project
organization:
- BuildAll.sh
- CleanVendor.sh
- CloneVendorRepos.sh
- StatusCheck.sh
- validate-mcp.sh

Remove temporary build-nextcloud-mcp.sh as nextcloud-mcp is now built.
2026-01-22 18:02:56 -05:00