Compare commits

..

1 Commits

Author SHA1 Message Date
Romuald Członkowski
32f63c64a5 fix: memory leak in session removal - close MCP server properly (#471)
- Add close() method to N8NDocumentationMCPServer that:
  - Calls server.close() (MCP SDK cleanup)
  - Clears internal cache
  - Nullifies service references to help GC
- Update removeSession() to call server.close() before releasing references

Root cause: removeSession() deleted server from map but didn't call cleanup
Evidence: Production server memory grew ~1GB in 43 minutes (10% to 35%)

Conceived by Romuald Członkowski - https://www.aiadvisors.pl/en

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 18:18:56 +01:00
3 changed files with 2 additions and 17 deletions

View File

@@ -7,21 +7,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
## [2.28.8] - 2025-12-07
### Bug Fixes
**Multi-tenant: handleValidateWorkflow missing context parameter (#474)**
Fixed `n8n_validate_workflow` tool failing in multi-tenant mode with error:
`"n8n API not configured. Please set N8N_API_URL and N8N_API_KEY environment variables."`
- **Root Cause**: `handleValidateWorkflow` called `handleGetWorkflow` without passing the `context` parameter
- **Impact**: Multi-tenant deployments could not use the `n8n_validate_workflow` tool
- **Solution**: Pass `context` parameter to `handleGetWorkflow` call (line 987)
**Conceived by Romuald Członkowski - [AiAdvisors](https://www.aiadvisors.pl/en)**
## [2.28.7] - 2025-12-05
### Bug Fixes

View File

@@ -1,6 +1,6 @@
{
"name": "n8n-mcp",
"version": "2.28.8",
"version": "2.28.7",
"description": "Integration between n8n workflow automation and Model Context Protocol (MCP)",
"main": "dist/index.js",
"types": "dist/index.d.ts",

View File

@@ -984,7 +984,7 @@ export async function handleValidateWorkflow(
const input = validateWorkflowSchema.parse(args);
// First, fetch the workflow from n8n
const workflowResponse = await handleGetWorkflow({ id: input.id }, context);
const workflowResponse = await handleGetWorkflow({ id: input.id });
if (!workflowResponse.success) {
return workflowResponse; // Return the error from fetching