add Effect-native McpClient
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 8/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Da chiarire
- Stato di attività
- Attiva
- Stack tecnologico
- typescript
- Ambito
- api
Direzione di ricerca
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.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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
ToolandToolkitAPIs.
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.
- Lingua principale
- TypeScript
- Stelle
- 16.7k
- Fork
- 808
- Merge medio
- 8h 41m
- PR unite (30g)
- 711
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di Effect-TS/effect
-
BrowserWorkerRunner: port finalizer throws when the worker global has no close() (Bun)Forse già presa @santiago-ramos-02 l’ha presa 18 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
Effect-TS/effect#8635 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Support {self: this} for fnUntracedForse di nuovo libera @ArjunCodess l’ha presa 29 giorni fa e non c’è nessuna pull request aperta. Apertaenhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
Effect-TS/effect#8101 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Effect.callback keeps state from finished suspensions alive until the next full GCForse già presa @effect-bot l’ha presa oggi. Aperta
Effect-TS/effect#9497 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
Replay-enabled PubSub keeps every published value alive until the next full GCForse già presa @effect-bot l’ha presa oggi. Aperta
Effect-TS/effect#9496 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
Socket.readerString corrupts UTF-8 characters split across TCP chunksForse già presa @jayhemnani9910 l’ha presa oggi. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di Effect-TS/effect
Issue simili
-
freshness freshness:observed-only
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
thoroc/context-radar#280 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
-
documentation story
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
I maintainer di solito rispondono entro 1 giorno
-
Billing: computeBundleEconomicsFrom treats a NULL component cost as 0, inflating bundle marginApertabug category:billing priority:p3 track:fast
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
LanternOps/breeze#9223 ·
I maintainer di solito rispondono entro 1 giorno