feat(mcp-client): auto-reconnect with bounded backoff after transport close
A per-instance connection supervisor restarts the original server config
with exponential backoff when the transport closes, re-runs tool discovery
on success, and atomically replaces the previous generation. Default policy
retries for ~2.5 minutes (10 attempts, 500ms→30s doubling) before giving up
and unregistering the server's tools.
New config block reconnect { enabled, initialDelayMs, maxDelayMs, maxAttempts }
on both transports; misconfiguration fails plugin load. A connection that
survives past the stability window (maxDelayMs) resets the attempt budget,
so occasional crashes recover indefinitely while a crash loop still exhausts
the cap.
Integrates with the upstream failOnStartupError: the initial sync uses
registrationFailure:'throw' when that flag is set so a squatted namespace
still rejects activation.
Fixes #1746
This commit is contained in:
@@ -51,6 +51,17 @@ server.registerTool('image', {
|
||||
],
|
||||
}))
|
||||
|
||||
server.registerTool('crash', {
|
||||
title: 'Crash Tool',
|
||||
description: 'Replies, then exits the server process (crash-recovery test).',
|
||||
inputSchema: {},
|
||||
}, async () => {
|
||||
// Exit AFTER the response flushes so the caller observes a clean result
|
||||
// followed by a transport close, like a real post-reply crash.
|
||||
setTimeout(() => process.exit(7), 25)
|
||||
return { content: [{ type: 'text', text: 'crashing' }] }
|
||||
})
|
||||
|
||||
// Dotted name: legal in MCP, illegal in the DeepSeek function-name contract.
|
||||
// Exercises the bridge's normalize-and-hash public-name path end to end.
|
||||
server.registerTool('admin.reset', {
|
||||
|
||||
Reference in New Issue
Block a user