Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

add Effect-native McpClient

Cerrado
#8,912 2 comentarios 1 reacción 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Ya se ha fusionado un pull request relacionado.

  • #8862 de @lloydrichards — fusionado

Evaluación

Dificultad
5/5
Tiempo estimado
Más de una semana
Aptitud para principiantes
8/100
Tipo de issue
Nueva funcionalidad
Claridad
Necesita aclaración
Estado de actividad
Activo
Stack tecnológico
typescript
Área
api

Línea de trabajo

This is a large design-level feature, not a starter task. Before any code, read the linked open pull request #8862 and the existing McpServer implementation the issue refers to, to see what is already in flight. The issue proposes trimming the first deliverable to transports, legacy and modern protocols, and tool, prompt and resource discovery, but the maintainers have not agreed on that scope yet. Done means an agreed scope and design, not a patch.

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

Descripción

enhancement
What is the problem this feature would solve?

At the moment Effect only has an McpServer implementation which means we can only offer part of the stack. There are already a lot of effect harnesses that need to either use the @modelcontextprotocol sdk or roll their own version. Since Effect already has a lot of the Schema implementation setup, it would benefit greatly from being able to reuse to build out the McpClient as well.

What is the feature you are proposing to solve the problem?

Add an MCP client that lets Effect applications discover server capabilities, use tools, access prompts and resources, and handle interactive requests. The full requirement would cover both legacy and modern protocols over stdio and Streamable HTTP.

flowchart LR
  Server[McpServer] <--> Client[McpClient]
  Client --> Toolcall[Toolcall] --> Direct(Application workflow)
  Client --> Toolkit[Toolkit] --> Model[LanguageModel] --> Agent(Agent workflow)
  Client --> Prompt[Prompt] --> Direct
  Client --> Resource[Resource] --> Direct
  Client --> Subscription[Subscription] --> Direct

Tools

  • Discover tools, preserving schemas, annotations, and metadata.
  • Call a discovered tool and retain its complete result, including content, structured output, and isError.
  • Decode structured output with a caller-provided Effect schema.
  • Adapt discovered tools through the standard Tool and Toolkit APIs.

Prompts

  • List available prompts. Retrieve a prompt with its arguments.
  • Preserve message roles, content, and metadata.

Resources

  • List resources and resource templates. Read a resource by URI.
  • Preserve text, binary content, MIME types, and metadata.

Subscriptions

  • Observe tool, prompt, and resource list changes where the selected protocol supports them. Subscribe to resource updates where supported.
  • Expose notifications through scoped streams with bounded buffering.
  • Release subscriptions when their scope closes.

Elicitation

  • Let applications supply Effect handlers for server requests for user input.
  • Support form and URL elicitation where the selected revision permits them.
  • Represent acceptance, rejection, and cancellation explicitly.
Keep it reasonably simple

Adding all this at once will be a complex and heavy PR so I would trim back the first deliverable to to just the transport layers, legacy/modern protocols, and tools / prompts / resource discovery. I think adding the subscription and elicitation in the first pass will complicate things with the lifecycle so should be addressed in a follow up.

Lenguaje dominante
TypeScript
Estrellas
16.7k
Forks
808
Merge medio
10 h 13 min
PR fusionados (30 d)
800

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 Effect-TS/effect

Todos los issues de Effect-TS/effect

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.