ClientCapabilities.experimental fails to decode object-valued capabilities
Los mantenedores suelen responder en 7 días
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 72/100
Línea de trabajo
Start at the Swift SDK's ClientCapabilities.experimental definition and the initialize-request decoding path. Add a regression test for an object-valued experimental capability such as {"example/capability": {}} and verify initialization succeeds while preserving supported existing values.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Description
Swift MCP SDK 0.12.1 models the experimental client capabilities field as:
public var experimental: [String: String]?
This causes MCP initialization to fail when a client sends an object-valued experimental capability.
For example, current OpenAI Codex sends:
"experimental": {
"codex/auth-change": {}
}
The {} value cannot be decoded as a String, so decoding of the initialize parameters fails and the server returns:
-32603 Internal error:
The data couldn’t be read because it isn’t in the correct format.
The MCP specification defines ClientCapabilities.experimental as a map of capability names to objects, rather than strings.
Minimal reproduction
Using the same unchanged Swift MCP server:
Fails
"experimental": {
"codex/auth-change": {}
}
Result:
-32603 Internal error:
The data couldn’t be read because it isn’t in the correct format.
Succeeds
"experimental": {}
Initialization succeeds and the server advertises its tool capability.
An unrelated object-valued experimental capability produces the same failure, so this is not specific to codex/auth-change.
Expected behavior
ClientCapabilities.experimental should accept arbitrary MCP capability objects, including an empty object:
"experimental": {
"example/capability": {}
}
Unknown experimental capabilities should not prevent initialization.
A possible Swift representation might use the SDK's arbitrary JSON value/object type rather than String, for example conceptually:
[String: JSONValue]?
or the appropriate existing SDK-native equivalent.
Regression test
A regression test should decode an initialize request containing:
"experimental": {
"example/capability": {}
}
and verify that initialization succeeds.
It would also be useful to preserve compatibility with any previously accepted experimental values where appropriate.
Environment
- Swift MCP SDK: 0.12.1
- Swift MCP SDK HEAD tested:
a0ae212ebf6eab5f754c3129608bc5557637e605 - OpenAI Codex CLI:
0.154.0-alpha.6.2 - macOS: 27.0 (
26A428) - Downstream server used for my reproduction:
eneko-codes/apple-reminders-mcp - Downstream server commit:
aa5730b3cea147343528eb9f55bfd6dcaa9e3712
The problem appears SDK-level rather than specific to that downstream server.
Related issue
OpenAI Codex issue #44458 independently reproduces the same failure with other Swift-based MCP helpers:
https://github.com/openai/codex/issues/44458
That report shows the same A/B result:
- object-valued experimental capability → initialization failure
- empty experimental object / omitted field → successful initialization
- Lenguaje dominante
- Swift
- Estrellas
- 1.5k
- Forks
- 254
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de modelcontextprotocol/swift-sdk
-
NetworkTransport leaks the underlying socket (CLOSE_WAIT) when reconnection is disabled and the receive loop terminatesPosiblemente ocupada @skirrellyjones la tomó hace 42 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
modelcontextprotocol/swift-sdk#282 ·
Los mantenedores suelen responder en 7 días
-
Value decoding changes data-URL-looking JSON strings into Value.dataPosiblemente ocupada @bitbemol la tomó hace 52 días. Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
modelcontextprotocol/swift-sdk#277 ·
Los mantenedores suelen responder en 7 días
-
enhancement
Dificultad 1/5 Menos de una hora Aptitud para principiantes 78/100
modelcontextprotocol/swift-sdk#274 ·
Los mantenedores suelen responder en 7 días
-
`HTTPClientTransport` fails to build on Windows: `#if !os(Linux)` guards no longer match the `EventSource` platform conditionQuizá libre de nuevo Un pull request para esta issue se cerró sin fusionarse. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
modelcontextprotocol/swift-sdk#261 ·
Los mantenedores suelen responder en 7 días
-
Value: add numberValue (Double?) that coerces .int and .doublePosiblemente ocupada @gsdali la tomó hace 164 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
modelcontextprotocol/swift-sdk#225 ·
Los mantenedores suelen responder en 7 días
Todos los issues de modelcontextprotocol/swift-sdk
Issues similares
-
area: build-and-ci S3: minor
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
manaflow-ai/cmux#22595 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 61/100
mozilla-mobile/firefox-ios#36202 ·
Los mantenedores suelen responder en 1 día
-
clawsweeper:fix-shape-clear clawsweeper:needs-maintainer-review clawsweeper:needs-product-decision clawsweeper:no-new-fix-pr clawsweeper:source-repro issue-rating: 🦞 diamond lobster P3
Dificultad 1/5 Menos de una hora Aptitud para principiantes 87/100
steipete/CodexBar#4668 · 1 comentario · 1 reacción ·
Los mantenedores suelen responder en 1 día
-
area/kotlin
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
Los mantenedores suelen responder en 1 día
-
cable-report
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100
darrylmorley/whatcable#656 ·