refactor(core): defer mcp resource events

This commit is contained in:
Aiden Cline 2026-06-29 20:49:36 -05:00
commit 1d78a0ab95
4 changed files with 2 additions and 61 deletions

View file

@ -13,7 +13,6 @@ import {
ListToolsResultSchema,
type LoggingMessageNotification,
LoggingMessageNotificationSchema,
ResourceListChangedNotificationSchema,
ToolListChangedNotificationSchema,
ToolSchema,
} from "@modelcontextprotocol/sdk/types.js"
@ -107,8 +106,6 @@ export interface Connection {
readonly onLog: (callback: (message: LogMessage) => void) => void
/** Registers a callback fired when the server announces its tool list changed; no-op if unsupported. */
readonly onToolsChanged: (callback: () => void) => void
/** Registers a callback fired when the server announces its resource list changed; no-op if unsupported. */
readonly onResourcesChanged: (callback: () => void) => void
}
/** Connects an MCP server; closing the calling scope tears down the transport and any spawned process. */
@ -270,10 +267,6 @@ export const connect = Effect.fnUntraced(function* (
if (!client.getServerCapabilities()?.tools?.listChanged) return
client.setNotificationHandler(ToolListChangedNotificationSchema, async () => callback())
},
onResourcesChanged: (callback) => {
if (!client.getServerCapabilities()?.resources?.listChanged) return
client.setNotificationHandler(ResourceListChangedNotificationSchema, async () => callback())
},
} satisfies Connection
}

View file

@ -264,15 +264,7 @@ export const layer = Layer.effect(
entry.client = undefined
entry.tools = undefined
entry.status = { status: "failed", error: "Connection closed" }
fork(
Effect.all(
[
events.publish(McpEvent.ToolsChanged, { server: name }),
events.publish(McpEvent.ResourcesChanged, { server: name }),
],
{ discard: true },
).pipe(Effect.ignore),
)
fork(events.publish(McpEvent.ToolsChanged, { server: name }).pipe(Effect.ignore))
})
connection.onLog((message) => fork(serverLog(name, message).pipe(Effect.ignore)))
connection.onToolsChanged(() => {
@ -283,9 +275,6 @@ export const layer = Layer.effect(
),
)
})
connection.onResourcesChanged(() => {
fork(events.publish(McpEvent.ResourcesChanged, { server: name }).pipe(Effect.ignore))
})
}
const serverLog = (server: ServerName, message: MCPClient.LogMessage) => {

View file

@ -10,13 +10,6 @@ export const ToolsChanged = Event.define({
},
})
export const ResourcesChanged = Event.define({
type: "mcp.resources.changed",
schema: {
server: Schema.String,
},
})
export const BrowserOpenFailed = Event.define({
type: "mcp.browser.open.failed",
schema: {
@ -25,4 +18,4 @@ export const BrowserOpenFailed = Event.define({
},
})
export const Definitions = Event.inventory(ToolsChanged, ResourcesChanged, BrowserOpenFailed)
export const Definitions = Event.inventory(ToolsChanged, BrowserOpenFailed)

View file

@ -80,7 +80,6 @@ export type Event =
| EventTuiToastShow2
| EventTuiSessionSelect2
| EventMcpToolsChanged
| EventMcpResourcesChanged
| EventMcpBrowserOpenFailed
| EventCommandExecuted
| EventProjectUpdated
@ -1514,13 +1513,6 @@ export type GlobalEvent = {
server: string
}
}
| {
id: string
type: "mcp.resources.changed"
properties: {
server: string
}
}
| {
id: string
type: "mcp.browser.open.failed"
@ -3007,7 +2999,6 @@ export type V2Event =
| TuiToastShow
| TuiSessionSelect
| McpToolsChanged
| McpResourcesChanged
| McpBrowserOpenFailed
| CommandExecuted
| ProjectUpdated
@ -6045,23 +6036,6 @@ export type McpToolsChanged = {
}
}
export type McpResourcesChanged = {
id: string
metadata?: {
[key: string]: unknown
}
type: "mcp.resources.changed"
durable?: {
aggregateID: string
seq: number
version: number
}
location?: LocationRef
data: {
server: string
}
}
export type McpBrowserOpenFailed = {
id: string
metadata?: {
@ -7143,14 +7117,6 @@ export type EventMcpToolsChanged = {
}
}
export type EventMcpResourcesChanged = {
id: string
type: "mcp.resources.changed"
properties: {
server: string
}
}
export type EventMcpBrowserOpenFailed = {
id: string
type: "mcp.browser.open.failed"