2.2.0 — echo-mcp: the containerized MCP server
Build and Push Docker Image / build (push) Successful in 23s
Build and Push Docker Image / build (push) Successful in 23s
ECHO as 14 typed MCP tools (streamable HTTP, stateless JSON, bearer auth, open /health) wrapping the 2.1.1 *_op cores in-process: - mcp-server/app.py: FastMCP app; duplicate gate + offline queueing surface as DATA (merge_into/force are parameters, never blind retries); recall packs excerpts into budget_chars by score; get_note is traversal-guarded with section/max_chars; patch_note enriches invalid-target errors with the note's actual headings; log_session wraps the session-end bundle (heartbeat-last); ECHO_MCP_TOOLS=core exposes only the six daily drivers; all MCP writes serialize in-process; startup fails fast on missing env. - Dockerfile (legacy format — no BuildKit on the CI runner), python:3.12-slim, healthcheck probes 127.0.0.1; .dockerignore keeps the context lean. - .gitea/workflows/docker-build.yml: standard image build; PORT redeploy trigger targets the echo-mcp container explicitly (repo name is echo). - deploy.unraid.yml: br0/auto-IP, /data volume, vault adjacency (ECHO_BASE=http://10.2.0.35:27123), secrets as SECRET: refs. - SKILL.md: prefer the echo_* tools when the connector is present; CLI recipes stay as the fallback. Spec header marked BUILT (tool count corrected to 14). - eval/test_mcp_server.py: e2e over real streamable HTTP (health/auth/ initialize/tools-list + capture->gate->merge->recall->log_session); skips cleanly when the SDK is absent. All seven suites green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,39 @@
|
||||
# Changelog
|
||||
|
||||
## 2.2.0
|
||||
|
||||
### Added — echo-mcp: the containerized MCP server
|
||||
|
||||
ECHO's operations are now reachable as **typed MCP tools** from any surface with
|
||||
an MCP connector (Claude Code, CoWork, claude.ai) — no Python-capable shell, no
|
||||
`$ECHO` path resolution, no output re-parsing. New `mcp-server/` + `Dockerfile`
|
||||
in this repo; deployed on ALPHA as the `echo-mcp` container behind
|
||||
`https://echomcp.alwisp.com` (streamable HTTP, stateless JSON, bearer auth,
|
||||
open `/health` for Docker/Kuma).
|
||||
|
||||
- **14 tools** wrapping the 2.1.1 `*_op` cores: `echo_load`, `echo_recall`
|
||||
(score-packed `budget_chars`), `echo_resolve`, `echo_get_note`
|
||||
(`section`/`max_chars`, traversal-guarded), `echo_get_scope`/`echo_set_scope`,
|
||||
`echo_health` (`deep` runs the linter), `echo_capture` (gate as data —
|
||||
`merge_into`/`force` are parameters), `echo_link` (paths OR resolvable names),
|
||||
`echo_append_note`/`echo_patch_note` (invalid-target errors include the note's
|
||||
actual headings), `echo_triage_inbox` (list/preview/apply in one tool),
|
||||
`echo_reflect`, `echo_log_session` (the session-end bundle, heartbeat-last).
|
||||
- **Tool profiles**: `ECHO_MCP_TOOLS=core` exposes only the six daily drivers.
|
||||
- **Vault adjacency**: the container talks to the Obsidian REST API's HTTP
|
||||
binding on the same box (`ECHO_BASE=http://10.2.0.35:27123`) — vault ops stop
|
||||
depending on Cloudflare/NPM/DNS; the public chain only fronts the `echomcp`
|
||||
ingress. Server-side offline queue at `/data`.
|
||||
- **All MCP writes serialize** through the server process; the vault advisory
|
||||
lock still coordinates with CLI clients.
|
||||
- SKILL.md: prefer the `echo_*` tools when present; CLI recipes are the fallback.
|
||||
- New suite `eval/test_mcp_server.py` (skips without the SDK): health/auth/
|
||||
initialize/tools-list + the capture→gate→merge→recall→log_session flow over
|
||||
real streamable HTTP.
|
||||
|
||||
The plugin itself is unchanged apart from the SKILL.md note — the container
|
||||
vendors `skills/echo-memory/scripts/` at build time (one canonical tree).
|
||||
|
||||
## 2.1.1
|
||||
|
||||
### Changed — Phase 0 of the MCP build: every high-level op returns an envelope
|
||||
|
||||
Reference in New Issue
Block a user