Commit Graph
27 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