softwaremill / softwaremill/chimp
T10 - client stateless lifecycle
Nobody has claimed this yet.
- 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
initializeand nonotifications/initialized - Every request carries
_metawith 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-Versionheader always equals the version in_meta - The protocol version is set once, on the client, transports do not carry their own version
- A
logLeveloption puts_meta.logLevelon every request, without it the client sends no log level and expects nonotifications/message
Responses
- A result without
resultTypeis complete. A result with an unknownresultTypefails withMcpProtocolException. - On
-32022the client retries once with a version fromsupportedthat chimp also supports, with no common version the call fails with an error that names both version lists serverCapabilitiesandserverInfocome fromserver/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,sendProgressandsendRootsListChangedfail withMcpProtocolExceptionon 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-metadataandjson-schema-ref-no-derefscenarios.
Spec:
- Basic - _meta
- Basic - Result Responses
- Versioning - Protocol Version Negotiation
- Streamable HTTP - Sending Messages
- Streamable HTTP - Protocol Version Header
- Discover - When to Call
- Logging - Per-request log level
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: theprotocolVersionparameter, what a stateless client sends on every request,discover(), version negotiation on-32022, the operations that exist only for legacy versions, thelogLeveloption.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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