softwaremill / softwaremill/chimp

T10 - client stateless lifecycle

Open
#248 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

2026-07-28 version support
Dominant language
Scala
Stars
102
Forks
10
Avg merge
1d 2h
Merged PRs (30d)
16

Description

Target branch: 2026-07-28-protocol-support

Requires:

Requests

  • With a stateless version there is no initialize and no notifications/initialized
  • Every request carries _meta with the protocol version, the client info and the client capabilities, the capabilities reflect the handlers the client was created with
  • Over HTTP the MCP-Protocol-Version header always equals the version in _meta
  • The protocol version is set once, on the client, transports do not carry their own version
  • A logLevel option puts _meta.logLevel on every request, without it the client sends no log level and expects no notifications/message

Responses

  • A result without resultType is complete. A result with an unknown resultType fails with McpProtocolException.
  • On -32022 the client retries once with a version from supported that chimp also supports, with no common version the call fails with an error that names both version lists
  • serverCapabilities and serverInfo come from server/discover, discover is available as an operation
  • the capability checks that guard operations use the discover result, as they use the initialize result today.

Legacy-only operations

  • ping, setLoggingLevel, subscribeResource, unsubscribeResource, sendProgress and sendRootsListChanged fail with McpProtocolException on the stateless wire, they keep working for legacy versions

Coverage

  • The rules above hold for the sync and streaming clients, over HTTP and stdio, on ZIO, Ox and Pekko.
  • The conformance client handles the request-metadata and json-schema-ref-no-deref scenarios.

Spec:

Conformance scenarios that must pass after this task:

  • Client: request-metadata, tools_call, json-schema-ref-no-deref

Docs: yes.

  • New page docs/client/protocol.md: the protocolVersion parameter, what a stateless client sends on every request, discover(), version negotiation on -32022, the operations that exist only for legacy versions, the logLevel option.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the stateless lifecycle requirements and the conformance scenarios request-metadata, tools_call, and json-schema-ref-no-deref, covering the sync and streaming clients over HTTP and stdio on ZIO, Ox, and Pekko. Add docs/client/protocol.md covering protocolVersion, per-request metadata, discover(), version negotiation, legacy-only operations, and logLevel, then verify the listed scenarios pass.

Written by the indexing model from the issue text.

Assessment

Tech stack
scala
Domain
api, distributed-systems, documentation, testing
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.