mcpcompat: reconcile removals in per-session resource/template/prompt sync

Abierto
#184 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
72/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Tranquilo
Stack tecnológico
go
Área
api, backend

Línea de trabajo

Empieza en mcpcompat/server/session.go con syncSessionTools y compara su reconciliación de eliminaciones con syncSessionResources, syncSessionResourceTemplates y syncSessionPrompts. Traza las rutas de estilo REPLACE de SetSessionResources, SetSessionResourceTemplates y SetSessionPrompts; después, verifica que las entradas omitidas se eliminen y que se emita list_changed; los casos de protección posteriores están en serve_session_test.go en stacklok/toolhive#5969.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

needs-triage

Context

In mcpcompat/server/session.go, syncSessionTools reconciles the per-session go-sdk server against the overlay by both adding new tools and removing ones no longer present (srv.RemoveTools(removed...)). The sibling syncs for the other capability kinds are add-only:

  • syncSessionResources
  • syncSessionResourceTemplates
  • syncSessionPrompts

None of them removes entries that are absent from the new overlay, even though go-sdk exposes RemoveResources / RemoveResourceTemplates / RemovePrompts.

Impact (downstream in toolhive)

toolhive's vMCP list_changed propagation (stacklok/toolhive#5965 for tools, stacklok/toolhive#5969 for resources/prompts) re-derives a session's advertised capabilities on a backend list_changed and applies them with the REPLACE-style SetSessionResources/SetSessionResourceTemplates/SetSessionPrompts. Because the underlying sync is add-only:

  • Additions to a backend's resources/templates/prompts propagate to the client correctly.
  • Removals do not — a resource/prompt the backend dropped stays registered on the session's go-sdk server and keeps appearing in resources/list / resources/templates/list / prompts/list until the session re-initializes.

Tools do not have this problem because their sync reconciles removals.

Note: read-time access is unaffected downstream (toolhive re-derives admission per call), so this is a stale-list / name-disclosure issue, not an access bypass.

Proposed change

Mirror syncSessionTools' removal reconciliation in syncSessionResources, syncSessionResourceTemplates, and syncSessionPrompts: track the previously-synced names/URIs and call the corresponding go-sdk Remove* for entries absent from the new overlay.

Acceptance

  • A REPLACE-style SetSessionResources/SetSessionResourceTemplates/SetSessionPrompts that omits a previously-present entry results in that entry being removed from the session's go-sdk server (and a downstream list_changed emitted).
  • After a toolhive-core release + bump, the add-only guard tests in stacklok/toolhive#5969 (serve_session_test.go, which currently assert removed entries still appear) can be flipped to assert removal, and the NOTE comments at resyncSessionResources/resyncSessionPrompts removed.

Reported from stacklok/toolhive#5969.

Lenguaje dominante
Go
Estrellas
2
Forks
6
Merge medio
23 h 44 min
PR fusionados (30 d)
133

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de stacklok/toolhive-core

Todos los issues de stacklok/toolhive-core

Issues similares

Más issues de Go

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.