Skip to content

Releases: pulseengine/mcp

v0.13.0 - JSON Serialization Fix

11 Oct 12:02

Choose a tag to compare

🔧 Breaking Changes

Fixed: mcp_tools macro now uses JSON serialization (#62)

The #[mcp_tools] macro previously used Rust's Debug format ({:?}) instead of JSON serialization, causing tool responses to contain Rust debug format instead of proper JSON. This has been fixed.

Before:

{
  "content": [{
    "type": "text",
    "text": "SearchResult { items: [...] }"
  }]
}

After:

{
  "content": [{
    "type": "text",
    "text": "{\"items\":[...]}"
  }],
  "structured_content": {"items": [...]}
}

📦 Migration Required

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

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

#[mcp_tools]
impl MyServer {
    pub fn my_tool(&self) -> MyResult {
        MyResult { data: vec!["item1".to_string()] }
    }
}

Types without Serialize will gracefully fall back to Debug format.


✨ What's Changed

mcp-macros

  • ✅ 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 without Serialize trait
  • ✅ Added comprehensive test suite (8 tests) covering all scenarios

Testing

  • New: json_serialization_test.rs with 8 comprehensive tests
    • Structured types (nested structs, vectors)
    • Result<T, E> return types
    • Simple types (string, number, bool, vector)
    • Verification of structured_content field population
    • Verification that Debug format markers are absent

📋 MCP Specification Compliance

This release ensures full compliance with MCP 2025-06-18 specification:

  • ✅ Tool responses use proper JSON serialization
  • structured_content field is populated for structured types
  • ✅ Both text content and structured_content contain equivalent data

📦 Published Crates (v0.13.0)

All workspace crates updated to v0.13.0:

  • pulseengine-mcp-protocol - Core MCP protocol types
  • pulseengine-mcp-logging - Logging infrastructure
  • pulseengine-mcp-auth - Authentication/authorization
  • pulseengine-mcp-security - Security middleware
  • pulseengine-mcp-security-middleware - Security middleware layer
  • pulseengine-mcp-monitoring - Metrics collection
  • pulseengine-mcp-transport - Transport layers (stdio/HTTP/WebSocket)
  • pulseengine-mcp-cli - CLI framework
  • pulseengine-mcp-cli-derive - CLI derive macros
  • pulseengine-mcp-server - Server orchestration
  • pulseengine-mcp-macros - Procedural macros
  • pulseengine-mcp-external-validation - External validation tools

🔗 Links


📚 Documentation

See CHANGELOG.md for detailed migration guide and full release notes.

Validation Results

✅ All validation tests passed
✅ Python SDK compatibility verified
✅ JSON-RPC 2.0 compliant
✅ MCP protocol compliant

v0.12.0 - MCP 2025-06-18 Specification Update

10 Oct 05:42

Choose a tag to compare

What's Changed

MCP 2025-06-18 Protocol Updates

  • ✅ Update to MCP 2025-06-18 specification
  • ✅ Add NumberOrString type for request IDs
  • ✅ Add optional metadata fields (_meta) to Content and CallToolResult
  • ✅ Add optional fields (title, annotations, icons) to Tools, Prompts, Resources
  • ✅ Update all test assertions to match new protocol types

CI/CD Improvements

  • ✅ Fix CI validation (formatting and clippy warnings)
  • ✅ Update pre-commit hooks to match CI requirements exactly
  • ✅ Add serial_test to prevent flaky env variable test failures
  • ✅ All tests pass with new protocol compliance

Breaking Changes

⚠️ Request ID field now uses NumberOrString type instead of Value
⚠️ Protocol structures updated with new optional fields

Installation

Full Changelog: v0.11.0...v0.12.0

Validation Results

✅ All validation tests passed
✅ Python SDK compatibility verified
✅ JSON-RPC 2.0 compliant
✅ MCP protocol compliant

v0.11.0 - MCP 2025-06-18 Specification Update

09 Oct 05:30

Choose a tag to compare

What's Changed

MCP 2025-06-18 Protocol Updates

  • ✅ Update to MCP 2025-06-18 specification
  • ✅ Add NumberOrString type for request IDs
  • ✅ Add optional metadata fields () to Content and CallToolResult
  • ✅ Add optional fields (title, annotations, icons) to Tools, Prompts, Resources
  • ✅ Update all test assertions to match new protocol types

CI/CD Improvements

  • ✅ Fix CI validation (formatting and clippy warnings)
  • ✅ Update pre-commit hooks to match CI requirements exactly
  • ✅ All tests pass with new protocol compliance

Breaking Changes

⚠️ Request ID field now uses NumberOrString type instead of Value
⚠️ Protocol structures updated with new optional fields

Installation

cargo add pulseengine-mcp-server
cargo add pulseengine-mcp-protocol
cargo add pulseengine-mcp-transport

Full Changelog: v0.10.0...v0.11.0

Validation Results

✅ All validation tests passed
✅ Python SDK compatibility verified
✅ JSON-RPC 2.0 compliant
✅ MCP protocol compliant

PulseEngine MCP v0.10.1 - Fixed Schema Generation

05 Sep 16:05

Choose a tag to compare

PulseEngine MCP v0.10.1 - Fixed Schema Generation

🔧 Bug Fixes

  • Fixed parameter schema generation regression in v0.10.0 - Resolved issue where parameter schemas were showing empty objects instead of proper JsonSchema-derived schemas
  • Dual-pattern parameter support - Now supports both multi-parameter (auto-generated schemas) and JsonSchema struct patterns (rich schemas) seamlessly
  • Improved schema validation - Enhanced parameter validation for MCP clients

📦 Published Crates

All framework crates have been published to crates.io:

  • pulseengine-mcp-protocol v0.10.1
  • pulseengine-mcp-logging v0.10.1
  • pulseengine-mcp-auth v0.10.1
  • pulseengine-mcp-security v0.10.1
  • pulseengine-mcp-security-middleware v0.10.1
  • pulseengine-mcp-monitoring v0.10.1
  • pulseengine-mcp-transport v0.10.1
  • pulseengine-mcp-server v0.10.1
  • pulseengine-mcp-macros v0.10.1
  • pulseengine-mcp-cli-derive v0.10.1
  • pulseengine-mcp-cli v0.10.1

🚀 Pattern Examples

Multi-parameter (Auto-generated schema)

pub fn multi_param_tool(&self, name: String, age: u32, active: bool) -> String {
    format!("Name: {name}, Age: {age}, Active: {active}")
}

JsonSchema struct (Rich schema)

#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct RichParams {
    /// Required message with description
    pub message: String,
    /// Optional count with validation
    pub count: Option<u32>,
}

pub fn rich_struct_tool(&self, params: RichParams) -> String {
    format!("Message: {}, Count: {:?}", params.message, params.count)
}

🔄 Migration

This is a non-breaking release. Existing code using either pattern will continue to work without changes.

📝 Full Changelog

  • Fix schema generation regression from v0.10.0 (#55)
  • Implement dual-pattern parameter support
  • Add comprehensive test coverage for both patterns
  • Update all examples and documentation
  • Maintain backward compatibility

🤖 Generated with Claude Code

Co-Authored-By: Claude [email protected]

v0.10.0: Parameterized Resources Support

15 Aug 04:25

Choose a tag to compare

🚀 New Features

Parameterized Resource Support

  • 🎯 URI Template Processing: Added support for parameterized resources using URI templates (RFC 6570)
  • ⚡ High-Performance Routing: Implemented matchit-based URI routing with radix trie for efficient resource resolution
  • 🔧 Automatic Parameter Extraction: Resources can now extract parameters from URIs like timedate://current-time/{timezone}
  • 📝 Enhanced Macro Support: Updated #[mcp_resource] attribute to handle parameterized URIs seamlessly

Technical Improvements

  • 🛠️ Router Generation: Static router generation with OnceLock for optimal performance
  • 🔀 Pattern Matching: Convert URI templates to matchit patterns for precise routing
  • ⚙️ Parameter Mapping: Automatic extraction and mapping of URI parameters to method arguments

🐛 Bug Fixes

  • ✅ Resource Delegation: Fixed critical bug in mcp_server macro where resources weren't properly delegated
  • 🎨 Code Quality: Resolved clippy warnings and formatting issues
  • 🔧 Dependency Updates: Added matchit dependency for URI routing

📖 Examples

Resources can now handle dynamic URIs:

#[mcp_resource("timedate://current-time/{timezone}")]
pub async fn get_current_time(&self, timezone: String) -> Result<TimeResponse> {
    // timezone parameter is automatically extracted from the URI
}

🎉 What's Next

  • Type-safe parameter conversion (planned for future release)
  • Enhanced parameter validation
  • Support for complex URI patterns

Full Changelog: v0.9.1...v0.10.0

v0.9.1 - Critical Resource Delegation Fix

14 Aug 04:35

Choose a tag to compare

v0.9.1 - Emergency Patch Release

This is a critical bug fix release that addresses a fundamental issue with MCP resources in v0.9.0.

Critical Fix

  • Resource delegation bug: Fixed the mcp_server macro to properly delegate resource operations to the McpResourcesProvider trait
  • Resources are now fully functional and visible in MCP Inspector

What was broken in v0.9.0

The v0.9.0 release introduced a major regression where:

  • Resources were advertised in server capabilities but completely non-functional
  • The mcp_server macro was not delegating list_resources and read_resource calls to the trait implementation
  • This resulted in empty resource lists and "unknown resource" errors for all resource requests

Technical Details

  • Modified McpResourcesProvider trait to always be implemented (similar to McpToolsProvider)
  • Updated helper methods to properly delegate to trait implementations
  • Ensured compilation works for servers without resources defined

Breaking Changes

None - this is a pure bug fix that restores intended functionality.

Upgrade Instructions

Update your Cargo.toml dependencies from 0.9.0 to 0.9.1:

pulseengine-mcp-server = "0.9.1"
pulseengine-mcp-macros = "0.9.1"
# ... other framework crates

Resources that were defined but not working in v0.9.0 will now function correctly.

Note: Parameterized resources still use hardcoded values - this will be addressed in a future release.

v0.9.0: Complete MCP Resource Integration with Modern Macro Patterns

13 Aug 17:05

Choose a tag to compare

🎯 PulseEngine MCP Framework v0.9.0

This release introduces comprehensive MCP resource support alongside significant improvements to the macro system and framework capabilities.

✨ Major Features

🔗 MCP Resource Integration

  • Complete MCP resource implementation with #[mcp_resource] macro
  • URI template support for parameterized resources (e.g., timedate://current-time/{timezone})
  • Automatic resource discovery and registration
  • Read-only data access pattern differentiated from tools
  • Resource listing via resources/list and reading via resources/read

🛠 Enhanced Macro System

  • Modern macro patterns with improved error handling
  • Generic type support for MCP servers (GenericServer<T>)
  • Comprehensive trait delegation with runtime detection
  • Improved clippy compliance and formatting standards
  • Fixed helper method generation for test compatibility

🏗 Framework Improvements

  • Panic-catching resource trait delegation
  • Enhanced error handling and validation
  • Improved CI/CD pipeline with comprehensive testing
  • Updated template MCP server with resource examples
  • Complete documentation for tools vs resources distinction

📦 Published Crates

All framework crates published to crates.io:

Crate Version Purpose
pulseengine-mcp-protocol v0.9.0 Core MCP protocol types & validation
pulseengine-mcp-logging v0.9.0 Structured logging & tracing
pulseengine-mcp-security v0.9.0 Security validation & monitoring
pulseengine-mcp-monitoring v0.9.0 Performance & health monitoring
pulseengine-mcp-auth v0.9.0 Authentication & authorization
pulseengine-mcp-transport v0.9.0 Transport layer implementations
pulseengine-mcp-server v0.9.0 Core MCP server framework
pulseengine-mcp-macros v0.9.0 Procedural macros & code generation
pulseengine-mcp-cli-derive v0.9.0 CLI derive macros
pulseengine-mcp-cli v0.9.0 CLI utilities & tooling

🔧 Technical Improvements

  • ✅ Fixed clippy warnings and formatting issues
  • ✅ Enhanced generic support in macros
  • ✅ Improved trait bound handling
  • ✅ Better error propagation and handling
  • ✅ Comprehensive test coverage

📚 Documentation & Templates

  • 📖 Updated template MCP server with resource examples
  • 📖 Complete tools vs resources distinction guide
  • 📖 URI template documentation and examples
  • 📖 Integration examples with MCP Inspector

🚀 Getting Started

Add the framework to your Cargo.toml:

[dependencies]
pulseengine-mcp-server = "0.9.0"
pulseengine-mcp-macros = "0.9.0"

Example with resources:

use pulseengine_mcp_macros::{mcp_server, mcp_tools, mcp_resource};

#[mcp_server(name = "My Server")]
#[derive(Clone)]
pub struct MyServer;

#[mcp_tools]
impl MyServer {
    /// A tool that performs an action
    pub async fn my_tool(&self, input: String) -> anyhow::Result<String> {
        Ok(format\!("Processed: {}", input))
    }
    
    /// A resource that provides read-only data
    #[mcp_resource(
        uri_template = "my-server://data/{id}",
        name = "server_data",
        description = "Server data by ID"
    )]
    pub async fn get_data(&self, id: String) -> anyhow::Result<MyData> {
        // Return data for the given ID
    }
}

🎉 What's Next

This release represents a major milestone in MCP framework development, providing complete resource support while maintaining full backward compatibility.

View the full changelog and migration guide →


Install: cargo install pulseengine-mcp-cli
Template: Use our template repository to get started
Docs: Framework Documentation
MCP Spec: Model Context Protocol

Release v0.8.2 - Working #[mcp_tools] Macro

11 Aug 19:57

Choose a tag to compare

Summary

This release includes a fully working #[mcp_tools] macro with comprehensive test coverage and CI validation.

Key Changes

  • ✅ Fixed #[mcp_tools] macro implementation and all test compilation errors
  • ✅ Updated pre-commit hooks to align with CI expectations
  • ✅ Resolved all clippy warnings and formatting issues
  • ✅ All CI checks now passing (Code Coverage, External Validation, PR Validation, Docker Validation)

Test Improvements

  • Fixed over 50 test servers missing #[mcp_tools] implementations
  • Updated method calls from deprecated to current API
  • Fixed return types for Display trait compatibility
  • Updated tool discovery tests to match current macro behavior

Published Packages

All core packages have been published to crates.io:

  • pulseengine-mcp-protocol v0.8.2
  • pulseengine-mcp-logging v0.8.2
  • pulseengine-mcp-auth v0.8.2
  • pulseengine-mcp-security v0.8.2
  • pulseengine-mcp-monitoring v0.8.2
  • pulseengine-mcp-transport v0.8.2
  • pulseengine-mcp-server v0.8.2
  • pulseengine-mcp-macros v0.8.2
  • pulseengine-mcp-cli-derive v0.8.2
  • pulseengine-mcp-cli v0.8.2

Release v0.8.1

10 Aug 15:00

Choose a tag to compare

Release v0.8.1

🚀 New Features & Improvements

CI/CD Optimizations

  • Optimized CI workflow - Reduced external validation CI time from 45+ minutes to ~20-25 minutes
  • Fast validation for PRs - Ubuntu-only validation for faster feedback
  • Parallel compilation - Added --jobs flag for faster builds
  • Conditional CI jobs - Python SDK and security validation only run on main branch/schedule

Framework Enhancements

  • Complete auth parameter support in macros - Enhanced #[mcp_tools] macro with full authentication parameter handling
  • Improved error handling - Fixed unused variable warnings in auth storage module
  • Better dependency management - Added missing anyhow dependency

Developer Experience

  • Enhanced formatting - Fixed code formatting and extended pre-commit hooks
  • Better CI feedback - Improved error messages and validation reporting

🛠️ Technical Changes

  • Add --workspace flag required for --exclude in cargo test commands
  • Implement complete auth parameter support in procedural macros
  • Optimize CI matrix strategy for better resource utilization
  • Enhanced caching strategy with Rust version-specific cache keys

📦 Published Packages

All framework packages have been updated to v0.8.1:

  • pulseengine-mcp-protocol v0.8.1
  • pulseengine-mcp-auth v0.8.1
  • pulseengine-mcp-security v0.8.1
  • pulseengine-mcp-monitoring v0.8.1
  • pulseengine-mcp-transport v0.8.1
  • pulseengine-mcp-server v0.8.1
  • pulseengine-mcp-macros v0.8.1
  • pulseengine-mcp-cli v0.8.1
  • pulseengine-mcp-cli-derive v0.8.1

🔄 Migration Notes

This is a patch release with no breaking changes. Simply update your dependencies to v0.8.1.

[dependencies]
pulseengine-mcp-server = "0.8.1"

Release v0.8.0 - Framework Simplification and Major API Improvements

08 Aug 18:21

Choose a tag to compare

🚀 Release v0.8.0 - Framework Simplification and Major API Improvements

This major release brings significant framework simplifications, improved CI/CD infrastructure, and enhanced developer experience through streamlined APIs and comprehensive testing improvements.

🎯 Major Features & Improvements

Framework Simplification

  • 93% Code Reduction: Massive simplification of the framework architecture
  • Streamlined APIs: Simplified server creation with intuitive builder patterns
  • Enhanced Macros: Improved procedural macros for server and tool definitions
  • Better Developer Experience: Reduced boilerplate and clearer API surface

Infrastructure & CI/CD

  • Robust CI Pipeline: Comprehensive testing across multiple platforms
  • Docker Support: Full containerization support with optimized builds
  • Code Coverage: Integrated coverage reporting and quality gates
  • Security Scanning: Enhanced security validation and dependency auditing

Testing & Quality

  • Comprehensive Test Suite: Extensive test coverage across all components
  • UI Testing: Complete UI test infrastructure for macro validation
  • Integration Tests: End-to-end testing scenarios
  • Performance Tests: Benchmarking and performance validation

📦 Published Crates

All crates have been published to crates.io in dependency order:

🛠️ Technical Improvements

API Changes

  • Simplified server builder patterns
  • Enhanced macro-based server definitions
  • Streamlined configuration management
  • Improved error handling and reporting

Build System

  • Optimized dependency management
  • Enhanced build performance
  • Better crate separation and modularity
  • Improved documentation generation

Development Tools

  • Enhanced CLI tooling
  • Better debugging support
  • Improved logging and monitoring
  • Streamlined development workflow

📋 Migration Guide

For users upgrading from previous versions, key changes include:

  1. Server Creation: Use the new simplified builder patterns
  2. Macro Usage: Updated macro syntax for server and tool definitions
  3. Configuration: Streamlined configuration management
  4. Dependencies: Updated crate dependencies and feature flags

🙏 Acknowledgments

This release represents a significant milestone in the PulseEngine MCP Framework evolution, made possible through extensive refactoring, testing, and community feedback.

For detailed migration guides and documentation, visit our documentation site.