All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Workspace Cache Locking: Improved lock file handling to prevent persistent deadlocks
- Increased lock retry delay from 50ms to 100ms for better stability
- Added automatic stale lock file cleanup after maximum retry attempts
- Implemented recursive retry mechanism with infinite loop protection
- Enhanced error messaging and logging for lock acquisition failures
- Resolves issue where crashed processes could leave persistent lock files blocking new hub instances
- VS Code Configuration Compatibility: Full support for
.vscode/mcp.jsonconfiguration format- Support for
"servers"key alongside existing"mcpServers"key - VS Code-style environment variable syntax:
${env:VARIABLE_NAME} - VS Code predefined variables:
${workspaceFolder},${userHome},${pathSeparator},${workspaceFolderBasename},${cwd},${/} - VS Code input variables via
MCP_HUB_ENV: support for${input:variable-id}syntax - JSON5 support for config files: comments and trailing commas now allowed
- Seamless migration path: existing
.vscode/mcp.jsonfiles work directly with MCP Hub
- Support for
- Configuration System: Enhanced environment variable resolution with VS Code compatibility
- Proper priority system: predefined variables → process.env → MCP_HUB_ENV
- Predefined variables available for placeholder resolution but not passed to server environments
- Comprehensive test coverage for all VS Code variable types and scenarios
- Real-time Workspace Lifecycle Tracking: Enhanced workspace cache with detailed hub state management
- Workspace states:
active(hub running with connections) andshutting_down(no connections, shutdown timer active) - Real-time connection count tracking for all active hubs
- Shutdown timer information including start time and delay duration
- Automatic state transitions when connections are added/removed
- Live updates via SSE events enable immediate UI feedback on workspace changes
- Workspace states:
-
Workspace Cache: Extended workspace entries with lifecycle metadata
- Added
state,activeConnections,shutdownStartedAt, andshutdownDelayfields - Improved cache update methods for atomic state management
- Better integration between SSEManager and WorkspaceCacheManager
- Added
-
SSE System: Enhanced real-time communication
- SSEManager now updates workspace cache on connection changes
- Automatic workspace state updates when shutdown timers start/cancel
- Async connection handling for better cache integration
-
Workspace Management: Global workspace cache to track active hub instances across different working directories
- New
/api/workspacesendpoint to list all active workspace instances - Real-time workspace updates via new
workspaces_updatedSSE subscription event - XDG-compliant workspace cache storage (
~/.local/state/mcp-hub/workspaces.json) - Automatic cleanup of stale workspace entries
- New
-
Multi-Configuration File Support: Enhanced configuration system with intelligent merging
- CLI now accepts multiple
--configarguments:--config global.json --config project.json - Later configuration files override earlier ones with smart merging rules
- Missing configuration files are gracefully skipped
- Enhanced file watching for all specified configuration files
- CLI now accepts multiple
-
Global Environment Variable Injection:
MCP_HUB_ENVenvironment variable support- Parse JSON string from
MCP_HUB_ENVand inject key-value pairs into all MCP server environments - Useful for passing shared secrets, tokens, or configuration to all servers
- Server-specific
envfields always override global values
- Parse JSON string from
- Health Endpoint: Now includes comprehensive workspace information showing current workspace and all active instances
- Configuration Management: Enhanced ConfigManager with robust array-based config path handling
- File Watching: Improved configuration file monitoring across multiple files with better change detection
- Error Handling: Enhanced error handling and logging throughout the workspace management system
- Updated all dependencies to latest versions for improved security and performance
- Marketplace Migration: Migrated from Cline marketplace API to MCP Registry system
- Marketplace API response now returns
serversinstead ofitems - Server objects use new schema with
idinstead ofmcpId - Field names changed:
githubStars→stars,createdAt→lastCommit - New registry endpoint:
https://ravitemer.github.io/mcp-registry/registry.json - Server details now include
readmeContentfetched directly from GitHub repositories
- Marketplace API response now returns
- Cache System Overhaul: Restructured cache format for better performance
- Cache TTL reduced from 24 hours to 1 hour for more frequent updates
- New cache structure:
{ registry, lastFetchedAt, serverDocumentation } - Better error handling and fallback mechanisms for network failures
- Enhanced Test Coverage: Comprehensive test suite for new registry system
- Tests for new data structures and API responses
- Network error handling and fallback testing
- Documentation fetching and caching tests
- Enhanced
cwdfield support: Placeholders incwdare now resolved just like other fields, and changingcwdin config triggers server restart.
cwdfield for stdio servers: can specify acwd(current working directory) for stdio-based servers in the config.- Example:
{ "server-name": { "cwd": "/home/ubuntu/server-dir/", "command": "npm", "args": ["start"] } }
- Example:
- XDG Base Directory Specification Support: Migrated from hardcoded ~/.mcp-hub paths to XDG-compliant directories
- Marketplace cache now uses XDG data directory (
~/.local/share/mcp-hub/cache) - Logs now use XDG state directory (
~/.local/state/mcp-hub/logs) - OAuth storage now uses XDG data directory (
~/.local/share/mcp-hub/oauth-storage.json) - Backward compatibility maintained for existing ~/.mcp-hub installations
- New XDG paths utility module with automatic fallback logic
- Marketplace cache now uses XDG data directory (
- Updated documentation to reflect new XDG-compliant path structure
- Improved file organization following Linux filesystem standards
- Unified MCP Server Endpoint: New /mcp endpoint that exposes all capabilities from managed servers
- Single endpoint for all MCP clients (Claude Desktop, Cline, etc.) to connect to
- Automatic namespacing of capabilities to prevent conflicts between servers
- Real-time capability synchronization when servers are added/removed/restarted
- Support for tools, resources, resource templates, and prompts from all servers
- Added comprehensive health monitoring with MCP endpoint statistics
- Improved capability change detection with efficient key-based comparison
- Added detailed documentation explaining the unified server approach
- Refactored capability synchronization for better performance
- Simplified capability change detection by removing complex deep comparisons
- Manual OAuth callback endpoint for improved headless server support
- Support for manual authorization flow in remote/headless environments
- Fixed nested placeholder resolution in environment variables not working correctly
- Fixed validation issue with some resource templates not recognized properly.
- Revert
yargsto v17 to maintain compatibility with Node.js v18
- Environment variable resolution now uses strict mode by default - configuration errors prevent server startup
- Fixed
${cmd: ...}placeholders not working in remote server configs without anenvfield - Commands can now be executed in any config field (url, headers, args, command), not just env
- Better handling of circular dependencies in environment variable resolution
- Universal
${}Placeholder Syntax: Centralized environment variable resolution system${ENV_VAR}for environment variables${cmd: command args}for command execution- Support across all configuration fields:
command,args,env,url,headers
- Legacy
$VARsyntax in args (use${VAR}instead) - Legacy
$: commandsyntax in env (use${cmd: command}instead) - All deprecated syntax now shows deprecation warnings
- Updated documentation with clear examples of new universal syntax
- Improved configuration section clarity and examples
- Fetching marketplace data fails with proxy or vpn using node fetch. Uses curl as fallback
- Don't throw error if reamdeContent is empty
- MCP server configs can have a
namefield. Ideally it should be used as a displayName when present.
- Update dependencies to latest versions
- Locally update the hash of flake.nix and release version with all changes at a time.
- Remove flake github workflow
- Use correct constant name
TOOL_LIST_CHANGEDinstead ofTOOLS_CHANGEDfor tool list subscription events
- Dev mode for automatic MCP server restart on file changes during development
- New
devconfiguration field withenabled,watch, andcwdoptions - File watching with glob pattern support for universal project compatibility
- /tools, /resources, /prompts endpoints accept request_options in the body which will be used when calling tools, resources and prompts.
- Warn instead of throwing error for MCP Server stderr output
- Remove log statement
- Support for
$: cmd arg1 arg2syntax in env config to execute shell commands to resolve env values - E.g
{
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-everything"],
"env": {
"MY_ENV_VAR": "$: cmd:op read op://mysecret/myenvvar"
}
}- Update open and @modelcontextprotocol/sdk to latest versions
- Refetch marketplace catalog if empty
- /hard-restart endpoint
- Reverted express v5 to v4
- Subscribed to notifications from a server even after it was stopped
- Updated dependencies to their latest versions
- Can use "Bearer ${SOME_OTHER_ENV}" in headers field of remote MCP server config
- Can use "ENV_VAR": "${SOME_OTHER_ENV}" in env field in server config
- start and stop behavior for servers broken
- False positive modified triggers when env field is falsy due to lack of deep cloning
- Support for MCP 2025-03-26 specification
- Primary streamable-http transport for remote servers
- SSE fallback transport support
- OAuth 2.0 authentication with PKCE flow
- Comprehensive feature support matrix in documentation
- replaces args that start with
$like$ENV_VARwith actual env var value. - Need to mention ENV_VAR in the "env" field in server config to avoid any side-effects
- handle config changes in parallel in case one fails others should not fail
- Starting a connection not updating it's config properly
- send SERVERS_UPDATED event for servers start and stop endpoints
- insignificant changes emiting importantChangesHandled event
- Improved file watching reliability across different editors
- Fixed issue with Neovim file watching not triggering after first change
- Enhanced cleanup of file watchers during shutdown
- Added proper resource cleanup for file watchers
- Removed client registration/unregistration API endpoints
- All clients now connect directly via SSE at /api/events
- Simplified client connection management to SSE-only model
- Enhanced SSE client connection tracking
- Improved client event notifications
- More detailed connection metrics in health endpoint
- Better documentation with updated architecture diagrams
- Improved --watch to only update affected servers on config changes
- Smarter config watching with better change detection
- Logging system now writes to ~/.mcp-hub/logs/mcp-hub.log
- mcp-hub stays up running even when all clients disconnect unless
--auto-shutdownis provided - Helpful for running mcp-hub as systemd or separate process to avoid frequent startups
- Fixed server_name not defined errors in route handlers
- Added SSE (Server-Sent Events) transport support for remote MCP servers
- Automatic server type detection (STDIO/SSE) based on configuration
- SSE-specific error handling and connection management
- Documentation for SSE server configuration and examples
- Fixed package dependencies in package-lock.json
- Updated flake.nix with correct npmDepsHash
- Changed all server operations endpoints to use server_name in request body instead of URL parameters:
POST /servers/:name/start->POST /servers/startwith server_name in bodyPOST /servers/:name/stop->POST /servers/stopwith server_name in bodyGET /servers/:name/info->POST /servers/infowith server_name in bodyPOST /servers/:name/refresh->POST /servers/refreshwith server_name in bodyPOST /servers/:name/tools->POST /servers/toolswith server_name in bodyPOST /servers/:name/resources->POST /servers/resourceswith server_name in body
- New prompts capability allowing MCP servers to provide and execute prompts
- New POST /servers/prompts endpoint for accessing server prompts
- Real-time prompt list change notifications via SSE events
- Updated documentation with prompt-related features and endpoint changes
- New POST /restart endpoint to reload config and restart MCP Hub servers
- Improved server shutdown logging with clearer status messages
- Extended marketplace cache TTL to 24 hours
- Moved runtime dependencies to devDependencies and bundled them for better compatibility
- Added prepublishOnly script to ensure dist/cli.js is built before publishing
- Improved build process to include all dependencies in the bundle
- Version reporting now works correctly across all Node.js environments by using build step
- Improved project structure by moving to built dist/cli.js
- Enhanced documentation with embedded mermaid diagrams
- improper version in package-lock.json
- Improved marketplace integration with user-friendly display names
- Enhanced marketplace cache initialization and error recovery
- Optimized startup by loading marketplace before MCP Hub
- Integrated marketplace functionality for discovering and managing MCP servers
- New API endpoints for marketplace interactions:
- GET /marketplace - List available servers with filtering and sorting
- POST /marketplace/details - Get detailed server information
- Enhanced marketplace caching system for better performance
- Comprehensive test suite for marketplace functionality
- Enhanced environment variable handling:
- Added getDefaultEnvironment from SDK for proper MCP server initialization
- Added support for MCP_ENV_VARS environment variable to pass additional variables
- Improved default environment configuration
- Allow fallback to process.env for falsy environment variables in config.env (#3)
- Real-time tool and resource capability notifications from MCP servers
- New endpoints for refreshing server capabilities:
- POST /servers/:name/refresh - Refresh specific server
- POST /refresh - Refresh all servers
- Enhanced event system for tool and resource list changes
- Automatic capability updates when tools or resources change
- Structured logging for capability changes
- MCPConnection and MCPHub now extend EventEmitter for better event handling
- Improved notification handling with proper SDK schemas
- Better error handling for capability updates
- Parallel execution of server capability refreshes
- Improved error handling and logging in MCPConnection and MCPHub
- Simplified server connection management
- Enhanced error message clarity for server connections
- Standardized server error codes
--versionflag returning unknown on bun (#1)
- New server control endpoints for start/stop operations with state management
- Parallel execution for server startup and shutdown operations
- Enhanced server state management with disable capability
- Improved logging for server lifecycle operations
- Better error handling and status reporting for server operations
- New
shutdown-delayCLI option to control delay before server shutdown when no clients are connected - Enhanced logging messages with improved clarity and context across all components
- More descriptive server status messages and operation feedback
- Integration example with ravitemer/mcphub.nvim Neovim plugin
- Simplified signal handler setup for more reliable graceful shutdown
- Improved logging message clarity and contextual information
- Reorganized server shutdown logic for better reliability
- Enhanced MCPConnection with detailed response examples for various scenarios (text, image, resources)
- Added argument validation for tool calls to ensure correct parameter types
- Improved error handling in HTTP router with Promise error handling wrapper
- Comprehensive error handling system with custom error classes (ConfigError, ConnectionError, ServerError, ToolError, ResourceError, ValidationError)
- Structured JSON logging with standardized error codes and detailed error information
- Enhanced CLI error management with improved error recovery
- Error code based error handling for better error identification and debugging
- Simplified logging system with JSON-only output
- More consistent error handling patterns across all components
- Improved error recovery and reporting mechanisms
- Initial release of MCP Hub
- Dynamic MCP server management and monitoring
- REST API for tool execution and resource access
- Real-time server status tracking via SSE
- Client connection management
- Process lifecycle handling
- Configuration-based server initialization
- Health monitoring and status tracking
- Automatic reconnection attempts
- Comprehensive error handling
- JSON-based logging
- API documentation
- Example implementations
- Test suite with high coverage