Skip to content

feat: implement bidirectional communication for MCP conformance#88

Merged
avrabe merged 7 commits intomainfrom
feat/bidirectional-communication
Dec 20, 2025
Merged

feat: implement bidirectional communication for MCP conformance#88
avrabe merged 7 commits intomainfrom
feat/bidirectional-communication

Conversation

@avrabe
Copy link
Contributor

@avrabe avrabe commented Dec 18, 2025

Summary

  • Implements ToolContext trait for server-to-client communication during tool execution
  • Adds real-time SSE streaming for POST responses to support bidirectional requests/responses
  • Fixes progressToken handling to support both string and integer types (per MCP spec)
  • Achieves 24/24 (100%) MCP conformance test pass rate

Key Changes

New Features

  • ToolContext trait with send_log(), send_progress(), request_sampling(), request_elicitation()
  • DefaultToolContext implementation with TransportBridge for transport-agnostic communication
  • Real-time SSE streaming in POST handler - events are sent as they're produced during tool execution
  • Conformance test server example (examples/conformance-server/)

Bug Fixes

  • Fixed progressToken extraction to handle both string and integer types
  • Changed pending_requests from tokio::sync::RwLock to std::sync::RwLock to avoid "cannot block in async runtime" panic

Architecture

  • StreamingNotification now has optional id field to support both notifications (no id) and requests (with id for response correlation)
  • TransportHandle wrapper in server.rs now delegates register_pending_request() to underlying transport

Test Plan

  • All 24 MCP conformance tests pass (was 22/24 before)
  • cargo test passes
  • cargo clippy passes
  • cargo fmt passes

Related Issues

Closes #86, #87

Add ToolContext trait and real-time SSE streaming to support
server-to-client requests (sampling, elicitation) and notifications
(progress, logging) during tool execution.

Key changes:
- ToolContext trait with send_log, send_progress, request_sampling
- Real-time SSE streaming for POST responses
- Support for numeric and string progressToken
- Sync RwLock for pending request correlation

Closes #86, #87
@github-actions
Copy link

github-actions bot commented Dec 18, 2025

Code Coverage Report 📊

Local Coverage: 21.66%
Validation: Handled by Codecov

Note: Coverage validation is now performed by Codecov to ensure consistency across all platforms.

Coverage Details
Filename                                                  Regions    Missed Regions     Cover   Functions  Missed Functions  Executed       Lines      Missed Lines     Cover    Branches   Missed Branches     Cover
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
integration-tests/src/auth_server_integration.rs              392                61    84.44%          26                 9    65.38%         290                69    76.21%           0                 0         -
integration-tests/src/cli_server_integration.rs               401                32    92.02%          35                 5    85.71%         355                23    93.52%           0                 0         -
integration-tests/src/end_to_end_scenarios.rs                 923               176    80.93%          40                 9    77.50%         636                94    85.22%           0                 0         -
integration-tests/src/lib.rs                                   22                12    45.45%           5                 2    60.00%          44                17    61.36%           0                 0         -
integration-tests/src/monitoring_integration.rs               440                54    87.73%          28                 6    78.57%         374                72    80.75%           0                 0         -
integration-tests/src/transport_server_integration.rs         450               119    73.56%          31                11    64.52%         384               143    62.76%           0                 0         -
mcp-auth/src/audit.rs                                         390               262    32.82%          28                17    39.29%         276               177    35.87%           0                 0         -
mcp-auth/src/config.rs                                         48                41    14.58%          11                10     9.09%          75                68     9.33%           0                 0         -
mcp-auth/src/crypto/encryption.rs                              89                89     0.00%           9                 9     0.00%          51                51     0.00%           0                 0         -
mcp-auth/src/crypto/hashing.rs                                 98                98     0.00%          10                10     0.00%          53                53     0.00%           0                 0         -
mcp-auth/src/crypto/keys.rs                                   115               115     0.00%           8                 8     0.00%          78                78     0.00%           0                 0         -
mcp-auth/src/crypto/mod.rs                                     15                15     0.00%           2                 2     0.00%          12                12     0.00%           0                 0         -
mcp-auth/src/jwt.rs                                           321               284    11.53%          29                27     6.90%         255               226    11.37%           0                 0         -
mcp-auth/src/lib.rs                                            18                15    16.67%           6                 5    16.67%          16                13    18.75%           0                 0         -
mcp-auth/src/manager.rs                                      1258              1116    11.29%         117               101    13.68%         938               794    15.35%           0                 0         -
mcp-auth/src/middleware/mcp_auth.rs                           235               235     0.00%          24                24     0.00%         206               206     0.00%           0                 0         -
mcp-auth/src/middleware/session_middleware.rs                 430               430     0.00%          41                41     0.00%         357               357     0.00%           0                 0         -
mcp-auth/src/models.rs                                        195               195     0.00%          19                19     0.00%         166               166     0.00%           0                 0         -
mcp-auth/src/oauth/authorize.rs                               159               159     0.00%          20                20     0.00%         232               232     0.00%           0                 0         -
mcp-auth/src/oauth/bearer.rs                                  159               159     0.00%          16                16     0.00%         111               111     0.00%           0                 0         -
mcp-auth/src/oauth/client_metadata.rs                          65                65     0.00%           8                 8     0.00%          59                59     0.00%           0                 0         -
mcp-auth/src/oauth/metadata.rs                                 75                75     0.00%           7                 7     0.00%          58                58     0.00%           0                 0         -
mcp-auth/src/oauth/mod.rs                                      28                28     0.00%           3                 3     0.00%          23                23     0.00%           0                 0         -
mcp-auth/src/oauth/models.rs                                   30                30     0.00%           6                 6     0.00%          42                42     0.00%           0                 0         -
mcp-auth/src/oauth/pkce.rs                                     45                45     0.00%           5                 5     0.00%          27                27     0.00%           0                 0         -
mcp-auth/src/oauth/registration.rs                            105               105     0.00%           7                 7     0.00%         106               106     0.00%           0                 0         -
mcp-auth/src/oauth/resource.rs                                 19                19     0.00%           3                 3     0.00%          13                13     0.00%           0                 0         -
mcp-auth/src/oauth/storage.rs                                 124               124     0.00%          17                17     0.00%          81                81     0.00%           0                 0         -
mcp-auth/src/oauth/token.rs                                   229               229     0.00%          24                24     0.00%         280               280     0.00%           0                 0         -
mcp-auth/src/permissions/mcp_permissions.rs                   419               419     0.00%          33                33     0.00%         319               319     0.00%           0                 0         -
mcp-auth/src/security/request_security.rs                     702               702     0.00%          49                49     0.00%         615               615     0.00%           0                 0         -
mcp-auth/src/session/session_manager.rs                       457               457     0.00%          50                50     0.00%         353               353     0.00%           0                 0         -
mcp-auth/src/storage.rs                                       697               680     2.44%          50                46     8.00%         412               394     4.37%           0                 0         -
mcp-auth/src/transport/auth_extractors.rs                     155               155     0.00%          27                27     0.00%         137               137     0.00%           0                 0         -
mcp-auth/src/transport/http_auth.rs                           303               303     0.00%          20                20     0.00%         216               216     0.00%           0                 0         -
mcp-auth/src/transport/stdio_auth.rs                          268               268     0.00%          22                22     0.00%         195               195     0.00%           0                 0         -
mcp-auth/src/transport/websocket_auth.rs                      351               351     0.00%          23                23     0.00%         258               258     0.00%           0                 0         -
mcp-auth/src/validation.rs                                    144               144     0.00%          13                13     0.00%          95                95     0.00%           0                 0         -
mcp-logging/src/aggregation.rs                                311               311     0.00%          27                27     0.00%         228               228     0.00%           0                 0         -
mcp-logging/src/alerting.rs                                   552               344    37.68%          39                17    56.41%         419               226    46.06%           0                 0         -
mcp-logging/src/correlation.rs                                415               415     0.00%          34                34     0.00%         299               299     0.00%           0                 0         -
mcp-logging/src/dashboard.rs                                  391               197    49.62%          21                15    28.57%         394               182    53.81%           0                 0         -
mcp-logging/src/metrics.rs                                    306               127    58.50%          36                19    47.22%         329               123    62.61%           0                 0         -
mcp-logging/src/persistence.rs                                360               360     0.00%          26                26     0.00%         202               202     0.00%           0                 0         -
mcp-logging/src/profiling.rs                                  502               496     1.20%          37                36     2.70%         398               354    11.06%           0                 0         -
mcp-logging/src/sanitization.rs                               268               265     1.12%          22                21     4.55%         181               173     4.42%           0                 0         -
mcp-logging/src/structured.rs                                 258               255     1.16%          24                23     4.17%         230               227     1.30%           0                 0         -
mcp-logging/src/telemetry.rs                                   39                26    33.33%           5                 3    40.00%          27                17    37.04%           0                 0         -
mcp-protocol/src/error.rs                                     206               166    19.42%          28                19    32.14%         164               130    20.73%           0                 0         -
mcp-protocol/src/errors.rs                                     83                83     0.00%          12                12     0.00%          40                40     0.00%           0                 0         -
mcp-protocol/src/lib.rs                                        12                 7    41.67%           2                 1    50.00%          11                 8    27.27%           0                 0         -
mcp-protocol/src/model.rs                                     559               543     2.86%          94                91     3.19%         689               675     2.03%           0                 0         -
mcp-protocol/src/validation.rs                                238               238     0.00%          25                25     0.00%         176               176     0.00%           0                 0         -
mcp-security/src/config.rs                                      4                 0   100.00%           1                 0   100.00%           9                 0   100.00%           0                 0         -
mcp-security/src/lib.rs                                         3                 0   100.00%           1                 0   100.00%           3                 0   100.00%           0                 0         -
mcp-security/src/middleware.rs                                 18                 3    83.33%           3                 0   100.00%          25                 3    88.00%           0                 0         -
mcp-security/src/validation.rs                                 10                10     0.00%           1                 1     0.00%          11                11     0.00%           0                 0         -
mcp-server/src/alerting_endpoint.rs                           117               117     0.00%          15                15     0.00%         110               110     0.00%           0                 0         -
mcp-server/src/backend.rs                                     115               100    13.04%          26                22    15.38%         105                92    12.38%           0                 0         -
mcp-server/src/builder_trait.rs                                44                44     0.00%           3                 3     0.00%          37                37     0.00%           0                 0         -
mcp-server/src/cli_helpers.rs                                  94                80    14.89%          17                14    17.65%          83                73    12.05%           0                 0         -
mcp-server/src/common_backend.rs                               57                57     0.00%          11                11     0.00%          79                79     0.00%           0                 0         -
mcp-server/src/context.rs                                      55                14    74.55%          10                 3    70.00%          46                16    65.22%           0                 0         -
mcp-server/src/dashboard_endpoint.rs                          104               104     0.00%          12                12     0.00%          79                79     0.00%           0                 0         -
mcp-server/src/handler.rs                                     389               250    35.73%          69                38    44.93%         267               146    45.32%           0                 0         -
mcp-server/src/health_endpoint.rs                              83                83     0.00%           5                 5     0.00%          91                91     0.00%           0                 0         -
mcp-server/src/metrics_endpoint.rs                            133               133     0.00%           7                 7     0.00%          86                86     0.00%           0                 0         -
mcp-server/src/middleware.rs                                  128                33    74.22%          13                 5    61.54%         104                17    83.65%           0                 0         -
mcp-server/src/observability/collector.rs                     179                78    56.42%          19                 8    57.89%         133                52    60.90%           0                 0         -
mcp-server/src/observability/config.rs                          3                 0   100.00%           1                 0   100.00%           8                 0   100.00%           0                 0         -
mcp-server/src/observability/metrics.rs                         3                 3     0.00%           1                 1     0.00%          11                11     0.00%           0                 0         -
mcp-server/src/observability/mod.rs                             3                 0   100.00%           1                 0   100.00%           3                 0   100.00%           0                 0         -
mcp-server/src/server.rs                                      344               144    58.14%          45                26    42.22%         256               110    57.03%           0                 0         -
mcp-server/src/tool_context.rs                                389               377     3.08%          47                44     6.38%         328               316     3.66%           0                 0         -
mcp-transport/src/batch.rs                                    195               195     0.00%          14                14     0.00%         128               128     0.00%           0                 0         -
mcp-transport/src/config.rs                                    15                12    20.00%           5                 4    20.00%          15                12    20.00%           0                 0         -
mcp-transport/src/http.rs                                     651               634     2.61%          39                36     7.69%         438               408     6.85%           0                 0         -
mcp-transport/src/lib.rs                                       86                71    17.44%          18                16    11.11%          88                76    13.64%           0                 0         -
mcp-transport/src/stdio.rs                                    233               186    20.17%          17                12    29.41%         162               119    26.54%           0                 0         -
mcp-transport/src/streamable_http.rs                          713               713     0.00%          54                54     0.00%         538               538     0.00%           0                 0         -
mcp-transport/src/validation.rs                               193               193     0.00%          14                14     0.00%         135               135     0.00%           0                 0         -
mcp-transport/src/websocket.rs                                 15                 9    40.00%           5                 3    40.00%          17                11    35.29%           0                 0         -
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TOTAL                                                       19250             15342    20.30%        1778              1451    18.39%       15380             12049    21.66%           0                 0         -

📋 Full Report: View on Codecov

@codecov
Copy link

codecov bot commented Dec 18, 2025

Codecov Report

❌ Patch coverage is 73.12253% with 272 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
mcp-transport/src/streamable_http.rs 44.44% 140 Missing ⚠️
mcp-server/src/server.rs 15.38% 55 Missing ⚠️
mcp-server/src/tool_context.rs 89.10% 45 Missing ⚠️
mcp-server/src/handler.rs 82.39% 25 Missing ⚠️
mcp-transport/src/lib.rs 93.05% 5 Missing ⚠️
mcp-protocol/src/model.rs 96.72% 2 Missing ⚠️

📢 Thoughts on this report? Let us know!

@github-actions
Copy link

github-actions bot commented Dec 18, 2025

PR Validation Results

Quick Validation: ✅

  • Format check
  • Clippy lints
  • Unit tests
  • Documentation

Compatibility Check: ✅

  • Protocol compliance
  • Server compatibility

Summary: ✅ All checks passed

Add ~300 new tests covering:
- ToolContext trait and implementations (tool_context_tests.rs)
- StreamableHttp transport bidirectional features
- Transport lib streaming context functions
- Server configuration edge cases

These tests improve coverage for the bidirectional communication
feature implemented in the previous commit.
ConnectionError maps to Transport, SessionNotFound maps to RequestFailed.
Cover notification error mappings (SessionNotFound, ChannelClosed, NotSupported).
Add tests for try_current_context, with_context, and create_tool_context edge cases.
Cover audio content, resource content (new signature), PromptMessage.new_resource,
and CompleteResult.with_values constructors.
@avrabe avrabe merged commit 415f03e into main Dec 20, 2025
21 of 22 checks passed
@avrabe avrabe deleted the feat/bidirectional-communication branch December 20, 2025 05:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Achieve 100% MCP Conformance Test Coverage

1 participant