11# CHANGELOG
22
33
4+ ## v0.3.0 (2026-03-13)
5+
6+ ### Bug Fixes
7+
8+ - Align MCP client with public API session contract
9+ ([ #35 ] ( https://github.com/ambient-code/mcp/pull/35 ) ,
10+ [ ` 051ee3b ` ] ( https://github.com/ambient-code/mcp/commit/051ee3b9f260fc5fa5e88f5a74b98349e149cfb7 ) )
11+
12+ The MCP client was sending field names that don't match the public API's CreateSessionRequest DTO,
13+ causing session creation to fail with validation errors. Also removes parameters the public API
14+ doesn't support.
15+
16+ - client.py: initialPrompt → task, llmConfig.model → model - client.py: remove interactive/timeout
17+ params (not in public API) - client.py: transform repos from bare strings to {url: str} objects -
18+ client.py: fix clone_session to use same corrected field names - client.py: update
19+ SESSION_TEMPLATES to use task/model fields - server.py: remove interactive/timeout from tool
20+ schema and dispatch
21+
22+ Co-authored-by: Claude Opus 4.6 (1M context) < noreply@anthropic.com >
23+
24+ - Move utils module into mcp_acp package for PyPI distribution
25+ ([ #38 ] ( https://github.com/ambient-code/mcp/pull/38 ) ,
26+ [ ` adc3fb0 ` ] ( https://github.com/ambient-code/mcp/commit/adc3fb0129b81bbe785ee98bb5048884ea53f726 ) )
27+
28+ The utils/pylogger module was at the repo root, outside the src/mcp_acp/ package. setuptools only
29+ includes mcp_acp* from src/, so the utils module was missing from the PyPI wheel, causing
30+ ImportError on install.
31+
32+ Co-authored-by: Claude Opus 4.6 (1M context) < noreply@anthropic.com >
33+
34+ ### Features
35+
36+ - Add HTTP transport support (--http flag) ([ #40 ] ( https://github.com/ambient-code/mcp/pull/40 ) ,
37+ [ ` 8f1d3d0 ` ] ( https://github.com/ambient-code/mcp/commit/8f1d3d0238ed49177571f224ceec4f4770c2367a ) )
38+
39+ mcp-acp can now serve over streamable-http in addition to stdio:
40+
41+ mcp-acp --http # HTTP on :8080 mcp-acp --http --port 9000 # custom port
42+
43+ Uses StreamableHTTPSessionManager + StreamableHTTPASGIApp from the MCP SDK. Exposes /health for k8s
44+ probes and /mcp for MCP protocol.
45+
46+ Bumps mcp dependency to >=1.26 (required for streamable-http APIs). Adds uvicorn, starlette,
47+ sse-starlette as dependencies. Version bump to 0.3.0.
48+
49+ Co-authored-by: Claude Opus 4.6 (1M context) < noreply@anthropic.com >
50+
51+ - Add optional Langfuse tracing for MCP tool calls
52+ ([ #37 ] ( https://github.com/ambient-code/mcp/pull/37 ) ,
53+ [ ` c0af6b0 ` ] ( https://github.com/ambient-code/mcp/commit/c0af6b0f62ff3eb6ce773b13b45cfae9750d3ac0 ) )
54+
55+ * feat: add optional Langfuse tracing for MCP tool calls and HTTP requests
56+
57+ Add observability to the mcp-acp server via Langfuse integration. Every MCP tool call produces a
58+ trace with tool name, filtered args, duration, and success/error status. HTTP requests to the ACP
59+ public API appear as nested child spans with method, path, and status code.
60+
61+ Tracing is opt-in and silently no-ops when unconfigured: - Reads LANGFUSE_PUBLIC_KEY,
62+ LANGFUSE_SECRET_KEY, LANGFUSE_BASE_URL - MCP_ACP_TRACING_ENABLED env var (default: true) serves as
63+ kill switch - SDK init failures are caught and logged, never break tool execution
64+
65+ - tracing.py: Langfuse v3 SDK client singleton, trace_tool_call and trace_http_request async context
66+ managers, no-op fallbacks, lifecycle - server.py: wrap call_tool() dispatch in trace_tool_call,
67+ flush on exit - client.py: wrap _ request() and _ request_text() in trace_http_request -
68+ settings.py: add missing _ acpctl_config_path() (pre-existing bug fix) - test_tracing.py: 25 unit
69+ tests covering all tracing paths - scripts/test_tracing_e2e.py: e2e test against live ACP cluster
70+
71+ Co-Authored-By: Claude Opus 4.6 < noreply@anthropic.com >
72+
73+ * test: add comprehensive E2E tests for MCP server
74+
75+ Add test_server_e2e.py with full coverage of all 26 MCP tools: - Session management (list, get,
76+ create, delete, restart, clone, update) - Observability (logs, transcript, metrics) - Labels (add,
77+ remove, list by label, bulk operations) - Bulk operations (delete, stop, restart - by name and by
78+ label) - Cluster management (list, whoami, switch, login)
79+
80+ Tests use mocked HTTP transport to verify the complete flow from tool call through client to HTTP
81+ requests. Includes: - Success and error path testing - Dry-run mode verification - Confirmation
82+ requirement enforcement for destructive operations - Input validation testing - Complete workflow
83+ simulation
84+
85+ Co-Authored-By: Claude Opus 4.5 < noreply@anthropic.com >
86+
87+ * Fix ruff linting issues in test_tracing_e2e.py
88+
89+ - Use single quotes for jsonpath argument containing double quotes - Remove unused f-string prefix
90+
91+ * Fix ruff linting issues in test_server_e2e.py
92+
93+ Remove unused AsyncMock import, extra blank line, and fix multi-line call formatting.
94+
95+ * Fix import path for pylogger in tracing.py
96+
97+ Use mcp_acp.utils.pylogger instead of utils.pylogger to match other modules in the package.
98+
99+ * refactor: enhance E2E tests with better mocking and edge cases
100+
101+ Improvements to MockHTTPClient: - Move to module level class with comprehensive docstrings - Add
102+ get_calls_for() to retrieve calls matching method/path - Add assert_called_with() for HTTP call
103+ verification - Sort responses by path length for better specificity matching
104+
105+ New test cases: - test_create_session_with_repos: verify repos parameter handling -
106+ test_invalid_template_name: validation for unknown templates - test_update_session_no_fields:
107+ error when no update fields provided - test_bulk_by_label_no_matches: graceful empty results
108+ handling - test_empty_sessions_list: empty list display - test_delete_verifies_http_call: HTTP
109+ call verification example
110+
111+ Other improvements: - Move json import to module level (remove local import) - Add detailed
112+ docstrings with test categories
113+
114+ * Fix test failures and implementation bug
115+
116+ - Fix test_client.py: Update test expectations to match actual API schema (use 'task' instead of
117+ 'initialPrompt', 'model' instead of 'llmConfig.model') - Fix clone_session: Add displayName to
118+ clone_data (was missing) - Fix test_tracing.py: Correct patch location for Langfuse module -
119+ Remove non-existent 'timeout' parameter from create_session tests
120+
121+ * Fix ruff formatting in test_server_e2e.py
122+
123+ Combine multi-line statements that ruff prefers on single lines.
124+
125+ ---------
126+
127+ Co-authored-by: Claude Opus 4.6 < noreply@anthropic.com >
128+
129+ Co-authored-by: Ambient Code Bot < bot@ambient-code.local >
130+
131+ Co-authored-by: Jeremy Eder < jeder@redhat.com >
132+
133+ ### Testing
134+
135+ - Add comprehensive E2E tests for MCP server ([ #39 ] ( https://github.com/ambient-code/mcp/pull/39 ) ,
136+ [ ` 0bc57bf ` ] ( https://github.com/ambient-code/mcp/commit/0bc57bf3434d1780ce923fe790d404d491acff8b ) )
137+
138+ * test: add comprehensive E2E tests for MCP server
139+
140+ Add test_server_e2e.py with full coverage of all 26 MCP tools:
141+
142+ Session Management: - list_sessions, get_session, create_session, create_session_from_template -
143+ delete_session, restart_session, clone_session, update_session
144+
145+ Observability: - get_session_logs, get_session_transcript, get_session_metrics
146+
147+ Labels: - label_resource, unlabel_resource, list_sessions_by_label - bulk_label_resources,
148+ bulk_unlabel_resources
149+
150+ Bulk Operations: - bulk_delete_sessions, bulk_stop_sessions, bulk_restart_sessions -
151+ bulk_delete_sessions_by_label, bulk_stop_sessions_by_label - bulk_restart_sessions_by_label
152+
153+ Cluster Management: - list_clusters, whoami, switch_cluster, login
154+
155+ Test Infrastructure: - MockHTTPClient class with response matching and call verification -
156+ make_response helper for creating mock httpx responses - Fixtures for cluster config, settings,
157+ and HTTP client
158+
159+ Test Coverage Includes: - Success and error path testing - Dry-run mode verification - Confirmation
160+ requirement enforcement for destructive operations - Input validation testing (invalid project,
161+ template, etc.) - Complete session lifecycle workflow simulation - Edge cases (empty lists, no
162+ matches, partial failures)
163+
164+ Co-Authored-By: Claude Opus 4.5 < noreply@anthropic.com >
165+
166+ * fix(ci): apply ruff formatting to test_server_e2e.py
167+
168+ Co-Authored-By: Claude Opus 4.6 (1M context) < noreply@anthropic.com >
169+
170+ ---------
171+
172+ Co-authored-by: Ambient Code Bot < bot@ambient-code.local >
173+
174+ Co-authored-by: Claude Opus 4.5 < noreply@anthropic.com >
175+
176+
4177## v0.2.2 (2026-02-16)
5178
6179### Bug Fixes
@@ -18,6 +191,11 @@ Fixes: https://github.com/ambient-code/mcp/actions/runs/22051441188
18191
19192Co-authored-by: Claude Opus 4.6 (1M context) < noreply@anthropic.com >
20193
194+ ### Chores
195+
196+ - ** release** : 0.2.2
197+ ([ ` d510040 ` ] ( https://github.com/ambient-code/mcp/commit/d510040ed4aebf48475c922ed8e05a2f8aa4d0a3 ) )
198+
21199
22200## v0.2.1 (2026-02-16)
23201
0 commit comments