Skip to content

Fix: Use JSON serialization instead of Debug format in tool returns - #63

Merged
avrabe merged 1 commit into
mainfrom
fix/issue-62-json-serialization
Oct 11, 2025
Merged

Fix: Use JSON serialization instead of Debug format in tool returns#63
avrabe merged 1 commit into
mainfrom
fix/issue-62-json-serialization

Conversation

@avrabe

@avrabe avrabe commented Oct 11, 2025

Copy link
Copy Markdown
Contributor

Fixes #62

Problem

The #[mcp_tools] macro was using Rust's Debug trait ({:?}) instead of JSON serialization when formatting tool results, causing tool responses to contain Rust debug format instead of proper JSON.

Before:

{
  "content": [{
    "type": "text",
    "text": "SearchResult { items: [SearchItem { id: 1, title: \"Bug\" }] }"
  }]
}

After:

{
  "content": [{
    "type": "text",
    "text": "{\"items\":[{\"id\":1,\"title\":\"Bug\"}]}"
  }],
  "structured_content": {"items": [{"id": 1, "title": "Bug"}]}
}

Changes

Core Fix (mcp-macros/src/utils.rs)

  • Modified generate_error_handling() to use serde_json::to_string() instead of format!("{:?}")
  • Now populates structured_content field per MCP 2025-06-18 specification
  • Graceful fallback to Debug format for types that don't implement Serialize

Testing (mcp-macros/tests/json_serialization_test.rs)

Added comprehensive test suite with 8 tests covering:

  • Structured return types (nested structs, vectors)
  • Result<T, E> return types
  • Simple types (string, number, bool, vector)
  • Verification that structured_content is populated
  • Verification that Debug format markers are absent

Version & Documentation

  • Version bumped to 0.13.0 (breaking change)
  • Updated CHANGELOG.md with detailed migration guide
  • Updated workspace dependencies

Breaking Change

Tool return types should implement Serialize trait for optimal JSON output:

#[derive(Debug, Serialize)]  // Add Serialize
struct MyResult {
    data: Vec<String>,
}

Types without Serialize will gracefully fall back to Debug format.

Test Results

running 8 tests
test test_simple_types_serialization ... ok
test test_nested_structured_return ... ok
test test_vector_serialization ... ok
test test_result_type_success_serialization ... ok
test test_result_type_error ... ok
test test_structured_return_serialization ... ok
test test_structured_content_field_populated ... ok
test test_no_debug_format_in_output ... ok

test result: ok. 8 passed; 0 failed; 0 ignored

Compliance

  • ✅ MCP 2025-06-18 specification compliance
  • ✅ All pre-commit hooks passed
  • ✅ All tests passing
  • ✅ Clippy clean
  • ✅ Formatted

…ol returns

Fixes #62

Changes:
- Modified utils.rs generate_error_handling() to use serde_json::to_string()
  instead of format!("{:?}") for tool return values
- Now populates structured_content field per MCP 2025-06-18 specification
- Graceful fallback to Debug format for types without Serialize trait
- Added comprehensive test suite (8 tests) in json_serialization_test.rs

Breaking Change:
- Tool return types should implement Serialize trait for optimal JSON output
- Types without Serialize will fallback to Debug format

Before: "SearchResult { items: [...] }"
After: {"items": [...]}

Version bumped to 0.13.0 due to breaking change requirement.
@github-actions

Copy link
Copy Markdown

Code Coverage Report 📊

Local Coverage: 19.90%
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              390                63    83.85%          26                 9    65.38%         289                72    75.09%           0                 0         -
integration-tests/src/cli_server_integration.rs               398                32    91.96%          35                 5    85.71%         355                23    93.52%           0                 0         -
integration-tests/src/end_to_end_scenarios.rs                 920               176    80.87%          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               438                68    84.47%          28                 8    71.43%         373                85    77.21%           0                 0         -
integration-tests/src/transport_server_integration.rs         445               114    74.38%          31                11    64.52%         382               141    63.09%           0                 0         -
mcp-auth/src/audit.rs                                         385               262    31.95%          27                17    37.04%         269               177    34.20%           0                 0         -
mcp-auth/src/config.rs                                         48                41    14.58%          11                10     9.09%          75                68     9.33%           0                 0         -
mcp-auth/src/consent.rs                                       140               140     0.00%          12                12     0.00%          98                98     0.00%           0                 0         -
mcp-auth/src/consent/manager.rs                               511               511     0.00%          40                40     0.00%         395               395     0.00%           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                                      1229              1116     9.19%         116               101    12.93%         918               794    13.51%           0                 0         -
mcp-auth/src/manager_vault.rs                                 241               241     0.00%          22                22     0.00%         194               194     0.00%           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/monitoring/dashboard_server.rs                   241               241     0.00%          28                28     0.00%         440               440     0.00%           0                 0         -
mcp-auth/src/monitoring/security_monitor.rs                   708               708     0.00%          70                70     0.00%         531               531     0.00%           0                 0         -
mcp-auth/src/performance.rs                                   577               577     0.00%          34                34     0.00%         425               425     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/setup/mod.rs                                     160               160     0.00%          21                21     0.00%         163               163     0.00%           0                 0         -
mcp-auth/src/setup/validator.rs                               141               141     0.00%          11                11     0.00%         106               106     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-auth/src/vault/infisical.rs                               637               637     0.00%          54                54     0.00%         489               489     0.00%           0                 0         -
mcp-auth/src/vault/mod.rs                                     135               135     0.00%          17                17     0.00%          92                92     0.00%           0                 0         -
mcp-cli-derive/src/lib.rs                                     324               324     0.00%          22                22     0.00%         262               262     0.00%           0                 0         -
mcp-cli/src/config.rs                                          81                68    16.05%          13                10    23.08%          70                61    12.86%           0                 0         -
mcp-cli/src/lib.rs                                             15                15     0.00%           5                 5     0.00%          15                15     0.00%           0                 0         -
mcp-cli/src/server.rs                                         241               241     0.00%          34                34     0.00%         207               207     0.00%           0                 0         -
mcp-cli/src/utils.rs                                          101               101     0.00%          13                13     0.00%          73                73     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                                   75                34    54.67%          12                 5    58.33%          78                24    69.23%           0                 0         -
mcp-monitoring/src/collector.rs                               179                78    56.42%          19                 8    57.89%         133                52    60.90%           0                 0         -
mcp-monitoring/src/config.rs                                    3                 0   100.00%           1                 0   100.00%           8                 0   100.00%           0                 0         -
mcp-monitoring/src/lib.rs                                       3                 0   100.00%           1                 0   100.00%           3                 0   100.00%           0                 0         -
mcp-monitoring/src/metrics.rs                                   3                 3     0.00%           1                 1     0.00%          11                11     0.00%           0                 0         -
mcp-protocol/src/error.rs                                     193               153    20.73%          27                18    33.33%         151               117    22.52%           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                12     0.00%           2                 2     0.00%          11                11     0.00%           0                 0         -
mcp-protocol/src/model.rs                                     210               200     4.76%          42                40     4.76%         242               235     2.89%           0                 0         -
mcp-protocol/src/validation.rs                                222               222     0.00%          23                23     0.00%         159               159     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                                     116               101    12.93%          26                22    15.38%         101                88    12.87%           0                 0         -
mcp-server/src/builder_trait.rs                                26                26     0.00%           3                 3     0.00%          23                23     0.00%           0                 0         -
mcp-server/src/common_backend.rs                               59                59     0.00%          11                11     0.00%          82                82     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                                     297               191    35.69%          53                30    43.40%         223               128    42.60%           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/server.rs                                      327               111    66.06%          38                19    50.00%         230                77    66.52%           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                                       13                 3    76.92%           1                 0   100.00%          12                 3    75.00%           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                          223               223     0.00%          19                19     0.00%         165               165     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                                                       20904             17074    18.32%        1869              1555    16.80%       16506             13221    19.90%           0                 0         -

📋 Full Report: View on Codecov

@codecov

codecov Bot commented Oct 11, 2025

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@github-actions

Copy link
Copy Markdown

PR Validation Results

Quick Validation: ✅

  • Format check
  • Clippy lints
  • Unit tests
  • Documentation

Summary: ✅ All checks passed

@avrabe
avrabe merged commit af4848f into main Oct 11, 2025
22 checks passed
@avrabe
avrabe deleted the fix/issue-62-json-serialization branch October 11, 2025 12:00
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.

Bug: mcp_tools macro uses Debug format instead of JSON serialization for tool results

1 participant