Commit Graph
14 Commits
Author SHA1 Message Date
mrcharles 2440188f1f feat(tooling): containerize dns-cli in tooling-cli/dns
Consolidate the Technitium DNS CLI into tooling-cli/dns/ with a
containerized bash CLI (src/dns_cli.sh), Dockerfile (alpine +
curl/python3/bind-tools/bash), README, AGENTS.md, validate.sh, and
.env.example. Env vars aligned to the centralized ~/.creds/technitium.env
store (TECHNITIUM_URL, TECHNITIUM_DNS_TOKEN, TECHNITIUM_DNS_ZONE).

Image built and pushed to the registry as
git.knownelement.com/reachableceo/dns-cli:latest. Verified live:
zones, list, and search all return data.

💘 Generated with Crush

Assisted-by: Crush:glm-5.2
2026-08-10 10:21:37 -05:00
mrcharles 67f8056e0b refactor(tooling): merge redmine-cli into tooling-cli/redmine
Consolidate the redmine-cli source into tooling-cli/redmine/
(CLI source, Dockerfile, README, AGENTS.md) with all documentation
rewritten to invoke the container via raw docker run and credentials
from the centralized ~/.creds/redmine.env store. No bin/ wrapper, no
system-dependent paths in the docs.

Removes the old redmine-cli/ subdirectory, updates the
KNELCredsManager consumer table, and updates STATUS.md + AGENTS.md
to reference the new location and registry image.

💘 Generated with Crush

Assisted-by: Crush:glm-5.2
2026-08-10 09:53:42 -05:00
mrcharles ecffb4e598 refactor(tooling): merge discourse-cli into tooling-cli/discourse
Consolidate the discourse-cli source into tooling-cli/discourse/
(CLI source, Dockerfile, README, AGENTS.md, validate.sh) with all
documentation rewritten to invoke the container via raw docker run
and credentials from the centralized ~/.creds/discourse.env store.
No bin/ wrapper, no system-dependent paths in the docs.

Removes the old discourse-cli/ subdirectory and updates the
KNELCredsManager consumer table to reference the container directly.

💘 Generated with Crush

Assisted-by: Crush:glm-5.2
2026-08-10 09:49:22 -05:00
mrcharles 1957dcbc7e feat(creds): centralize credentials to ~/.creds/, add KNELCredsManager
Rewire all MCP wrappers, docker-compose services, and validate scripts
to source credentials from ~/.creds/ instead of scattered per-service
.env files. This removes credential duplication and prepares for the
HashiCorp Vault migration.

Add KNELCredsManager under tooling-cli with:
- Containerized Bitwarden CLI (pinned image, host stays clean)
- scripts/bw wrapper with session management and data persistence
- README documenting credential layout, consumer wiring, and roadmap

Also fixes latent bug in MCP wrappers that were silently getting empty
creds from ambient shell env — they now explicitly source ~/.creds/.

Tracked in Redmine #407. Discourse: https://community.turnsys.com/t/308

💘 Generated with Crush

Assisted-by: Crush
2026-08-10 09:14:14 -05:00
mrcharles 7dfce930b6 fix: resolve subcategory slugs in category lookup and listing
The /categories.json endpoint only returns top-level categories by
default, so subcategory slugs (e.g. vp-techops) failed to resolve and
the 'categories' listing hid the entire subcategory tree. Both
_resolve_category and cmd_categories now pass include_subcategories=true
and traverse the nested subcategory_list.
2026-08-06 14:13:13 -05:00
mrcharles 11ec4cf4a3 fix: resolve discourse-mcp TS2345 build error and add env-var auth
The discourse-mcp was BLOCKED with a TypeScript TS2345 error caused by
the Dockerfile forcing SDK ^1.23.0 via `pnpm add`, while the upstream
code requires the lockfile's v1.17.3. Removed the override to use
`pnpm install --frozen-lockfile`.

The upstream server does not read environment variables directly — it
requires CLI args (--auth-pairs, --site) or a --profile JSON file. Added
a docker-entrypoint.sh that converts DISCOURSE_URL, DISCOURSE_API_KEY,
and DISCOURSE_API_USERNAME env vars into a profile JSON with auth_pairs
and site tethering.

Validated end-to-end: MCP handshake passes, site auto-tethers on startup,
live tool calls (discourse_search, discourse_filter_topics) return real
data from community.turnsys.com.

Updates STATUS.md and README.md to reflect discourse-mcp as production
ready. Adds JOURNAL.md entries for discourse-cli, discourse-mcp fix, and
protocol improvements.

💘 Generated with Crush

Assisted-by: Crush:glm-5.2
2026-07-30 16:53:12 -05:00
mrcharles e2d4bb333c fix: enforce one-server-at-a-time workflow in agent protocol
Agents were attempting to build/validate multiple MCP servers in
parallel, leading to incomplete work that never finished. This adds
a mandatory rule: work on exactly one MCP/LSP server end-to-end
(build, handshake, live client invocation with real data, status
update, commit) before starting the next.

💘 Generated with Crush

Assisted-by: Crush:glm-5.2
2026-07-30 16:42:57 -05:00
mrcharles d4e9fd693f feat: add discourse-cli for Discourse forum integration
A standalone CLI container (following the redmine-cli pattern) that
lets AI agents and humans read, post, reply, search, and discuss on a
Discourse forum via the REST API. Uses three environment variables
(DISCOURSE_URL, DISCOURSE_API_KEY, DISCOURSE_API_USERNAME) for auth.

Commands: whoami, categories, cat-info, topics/ls, show, create, reply,
update, delete, search, notifications.

Fully validated end-to-end (10/10 checks) against a live Discourse
instance: credential auth, whoami, categories, topics, show, search,
and full write cycle (create + reply + update + delete).

Includes validate.sh for repeatable end-to-end testing using
containerized curl + the CLI image.

💘 Generated with Crush

Assisted-by: Crush:glm-5.2
2026-07-30 16:39:17 -05:00
mrcharles 9d6764be11 fix: add honest status reporting protocol to prevent false validation claims
AI agents were marking services as "validated" or "working" after only
running structural tests (build + --help) without any live interaction
against the real external system. This adds a mandatory section to
AGENTS.md that:

- Distinguishes "built", "structural test", and "validated" as distinct
  states with concrete examples
- Prohibits using "validated"/"working"/"done"/"complete" for credential-
  dependent services until a live operation succeeds
- Requires obtaining credentials and running real read/write operations
  before claiming completion
- Enforces todo-list honesty: items can only be marked completed when
  their acceptance criterion is actually met

💘 Generated with Crush

Assisted-by: Crush:glm-5.2
2026-07-30 16:39:07 -05:00
mrcharles 4ad44bbe9d fix: update Dockerfiles for upstream changes and build fixes
- gitea-mcp, mcp-grafana: bump Go from 1.24 to 1.26 (upstream go.mod
  now requires >= 1.26.x)
- proxmox-mcp: constrain requires-python to >=3.10 for fastmcp compat
- elasticsearch-mcp: add missing vendor repo to CloneVendorRepos.sh
  (elastic/mcp-server-elasticsearch)
- context7-mcp: add .npmrc to disable pnpm v10 strict built-deps check
- drawio-mcp: exclude dev-proxy package from build (upstream TS errors),
  build with pnpm v10 + .npmrc
- discourse-mcp, ghidra-mcp: remain blocked (upstream issues)
2026-07-30 15:47:30 -05:00
mrcharles b595e26d62 fix: add profile flags to all docker compose commands and complete env vars
All services in docker-compose.yml are behind profiles (dev/ops), but the
maintenance scripts called docker compose without --profile, so no services
were detected or built. Added --profile dev --profile ops to BuildAll.sh,
StatusCheck.sh, and all relevant maintenance.sh commands.

Also:
- Added missing env vars for 8 newer servers to .env.example (beszel, gitea,
  grafana, ha, limesurvey, linkwarden, superset)
- Fixed maintenance.sh validate to use validate-all.sh instead of nonexistent
  validate-mcp.sh
2026-07-30 12:15:49 -05:00
mrcharles b3a810ba07 fix: make all scripts resolve paths relative to repo root
CloneVendorRepos.sh and CleanVendor.sh resolved vendor/ relative to scripts/
instead of the repo root, so vendor repos were cloned to the wrong location
(scripts/vendor) and docker-compose builds (which expect ./vendor at repo
root) would fail. BuildAll.sh and StatusCheck.sh had the same issue, cd-ing
to scripts/ instead of the repo root before running docker compose.

Also updated validate-all.sh with the 10 newer MCP servers that were added
after the script was last maintained (firefly-iii, actual, paperless, beszel,
gitea, grafana, ha, limesurvey, linkwarden, superset) plus added missing
env vars for audiobook-mcp and drawio-mcp.
2026-07-30 12:12:43 -05:00
mrcharles 237f345582 fix: correct crush.json wrapper script paths
All wrapper script paths referenced /home/charles/Projects/ (previous
machine/user) instead of the actual /home/reachableceo/projects/. Every
LSP and MCP entry in crush.json was broken. Fixed 39 path references.
2026-07-30 12:12:17 -05:00
mrcharles b69e70e0a1 feat: add redmine-cli containerized CLI tool
Merge the redmine-cli work from the EnableAI repo into KNEL-AIMiddleware as the
canonical home for AI middleware. This is a standalone CLI (python-redmine 2.5.0)
that lists, shows, creates, updates, and closes Redmine issues via docker run.
Complements the existing mcp-redmine MCP server (protocol-native) with a
direct-invocation tool for interactive use.

Verified end-to-end against projects.knownelement.com: whoami, projects,
statuses, list, show, create, update, and close all tested successfully.

Also records host-cleanliness conventions (docker/tea only on host; custom
images to Gitea registry) in AGENTS.md, and adds a CLI Tools section to
STATUS.md.
2026-07-30 12:09:44 -05:00