From 3f460ad8c4410ac16d3e7dd86bee1773a7445c1d Mon Sep 17 00:00:00 2001
From: "Len P. van der Hof"
Date: Fri, 31 Jul 2026 08:36:10 +0200
Subject: [PATCH 01/25] feat(ui): update to beautiful dynamic ReasonKit badges
---
README.md | 29 ++++++++++++++++++++++++-----
1 file changed, 24 insertions(+), 5 deletions(-)
diff --git a/README.md b/README.md
index a814a81..ac9a8cb 100644
--- a/README.md
+++ b/README.md
@@ -10,11 +10,30 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From d41e0544ae31695b373a02f96997581c18b3a44f Mon Sep 17 00:00:00 2001
From: "Len P. van der Hof"
Date: Sun, 23 Aug 2026 02:15:03 +0200
Subject: [PATCH 02/25] docs(architecture): define v0.2 governance upgrade
---
...ive-disclosure-and-governance-integrity.md | 51 ++++++++++++++++
docs/plans/2026-08-23-next-level-v0-2.md | 60 +++++++++++++++++++
2 files changed, 111 insertions(+)
create mode 100644 docs/adr/0001-progressive-disclosure-and-governance-integrity.md
create mode 100644 docs/plans/2026-08-23-next-level-v0-2.md
diff --git a/docs/adr/0001-progressive-disclosure-and-governance-integrity.md b/docs/adr/0001-progressive-disclosure-and-governance-integrity.md
new file mode 100644
index 0000000..8fb8ecd
--- /dev/null
+++ b/docs/adr/0001-progressive-disclosure-and-governance-integrity.md
@@ -0,0 +1,51 @@
+# ADR 0001: Progressive disclosure and governance integrity first
+
+- Status: Accepted
+- Date: 2026-08-23
+
+```yaml
+decision: >
+ Make ReasonKit Think the agent-native reasoning governance layer, with a small
+ complete default tool pack and evidence-gated decisions, before adding more
+ reasoning paradigms or an embedded model.
+context: >
+ The server already implements rich graph, pipeline, verification, assumption,
+ checkpoint, ReAct, prompt, and resource surfaces. Its 47-tool default is hard
+ for hosts to select correctly, while several integrity defects can let later
+ state erase or bypass earlier blockers. The current SDK pin also trails the
+ current MCP protocol implementation.
+alternatives:
+ - Keep all tools visible by default and improve descriptions only.
+ - Reduce the product to a sequential-thinking scratchpad.
+ - Add an implicit server-side model to produce semantic content.
+rationale: >
+ A complete 13-tool core retains route, deliberate, author, coach, assume,
+ verify, gate, decide, and audit operations while reducing discovery load by
+ 72 percent. Fail-closed state transitions and reproducible evaluations turn
+ the governance claim into observable product behavior.
+risks:
+ - Existing clients may expect a tool outside the default pack.
+ - Stricter gates can expose workflows that previously passed incorrectly.
+ - An SDK migration can change wire shapes despite compiling cleanly.
+mitigations:
+ - Preserve REASONKIT_TOOL_PACK=full as the compatibility escape hatch.
+ - Return actionable structured errors and pack-aware guidance.
+ - Isolate the SDK migration and test every supported stdio protocol version.
+validation:
+ - Exact 13, 33, and 47 tool inventories are enforced by tests.
+ - Planted-failure evaluations must remain blocked.
+ - Current and legacy MCP initialization and tool calls pass smoke tests.
+ - Formatting, clippy, unit tests, dependency audit, and release build pass.
+confidence: 0.9
+```
+
+## Boundaries
+
+- The host model remains the semantic engine; the server coordinates, records,
+ verifies, and gates host-authored reasoning.
+- Stdio remains the default and only transport in this tranche.
+- Heuristic outputs remain labeled. No silent model, retrieval, or network
+ fallback is introduced.
+- New academic paradigms, a hosted service, and a standalone UI are deferred
+ until the adoption and governance contracts have evidence.
+
diff --git a/docs/plans/2026-08-23-next-level-v0-2.md b/docs/plans/2026-08-23-next-level-v0-2.md
new file mode 100644
index 0000000..65db95d
--- /dev/null
+++ b/docs/plans/2026-08-23-next-level-v0-2.md
@@ -0,0 +1,60 @@
+# ReasonKit Think v0.2 implementation plan
+
+## Goal
+
+Deliver a materially easier and more trustworthy OSS MCP server: a complete
+five-minute path from intent to auditable decision, current protocol support,
+fail-closed state transitions, repeatable evaluations, and honest release and
+discovery metadata.
+
+## Workstream 1: MCP protocol and progressive disclosure
+
+1. Upgrade `rmcp` to the current compatible SDK in an isolated commit.
+2. Preserve stdio and the existing capability boundary.
+3. Add `REASONKIT_TOOL_PACK=core|standard|full`, defaulting to the audited
+ 13-tool core; preserve exact 33-tool standard and 47-tool full inventories.
+4. Store a filtered tool router and expose `reasoning://config/tool-packs`.
+5. Make startup instructions and guidance pack-aware.
+6. Return both JSON text and MCP `structuredContent` from common result helpers.
+7. Test current and legacy protocol negotiation and exact discovery inventories.
+
+## Workstream 2: Governance integrity
+
+1. Upsert verification claims without erasing unrelated prior blockers.
+2. Require qualifying evidence before an assumption can become verified.
+3. Accept observations only for action nodes and complete the referenced action.
+4. Reject unknown pipeline stages rather than synthesizing a passing stage.
+5. Generate one audit identifier and reuse it in the envelope and payload.
+6. Add regression tests for every corrected bypass.
+
+## Workstream 3: Adoption, evidence, and reproducibility
+
+1. Rewrite the README golden path around Auto mode, verification, decision, and
+ audit; move specialist surfaces behind explicit power-user guidance.
+2. Add deterministic planted-failure evaluations with machine-readable metrics.
+3. Run tests and evaluations in CI, and publish truthful package/registry metadata.
+4. Add release automation only when its generated configuration validates.
+5. Quarantine incomplete memory/retrieval behavior behind an explicit
+ experimental feature or remove claims that exceed implemented behavior.
+6. Reconcile roadmap files so shipped, partial, and proposed work are distinct.
+
+## Integration and verification
+
+1. Land each workstream as independently reviewable commits from isolated
+ worktrees.
+2. Cross-review the merged diff for protocol compatibility, trust regressions,
+ security, and OSS-boundary violations.
+3. Run formatting, clippy with warnings denied, all tests, doctests, release
+ build, MCP smoke tests, planted-failure evaluations, and `cargo audit`.
+4. Verify that the user's original dirty checkout is unchanged.
+
+## Exit criteria
+
+- Core discovery exposes only the complete 13-tool golden path.
+- `full` restores all existing tools without data migration.
+- A critical verification blocker cannot be erased by a later verification call.
+- Unsupported stages and evidence-free verification fail closed.
+- Planted false-claim and unresolved-assumption evaluations do not proceed.
+- The release candidate passes every available local gate; any unavailable gate
+ is reported with its exact blocker.
+
From df7b332b97fc0a1db8b3430b39c004c4cbc2c8e7 Mon Sep 17 00:00:00 2001
From: "Len P. van der Hof"
Date: Sun, 23 Aug 2026 02:29:02 +0200
Subject: [PATCH 03/25] build(mcp): migrate rmcp to 3.1.4
Adopt current protocol negotiation and model APIs while preserving the stdio transport and existing capability surface. Refresh transitive security fixes and extend compatibility probing through MCP 2026-07-28.
---
Cargo.lock | 235 +++++++++++++++++++++------------
Cargo.toml | 2 +-
scripts/client_compat_check.py | 8 +-
src/main.rs | 62 ++++-----
4 files changed, 185 insertions(+), 122 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
index 3d87150..55ee561 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -68,7 +68,7 @@ version = "1.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
dependencies = [
- "windows-sys 0.61.2",
+ "windows-sys 0.60.2",
]
[[package]]
@@ -79,14 +79,14 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
dependencies = [
"anstyle",
"once_cell_polyfill",
- "windows-sys 0.61.2",
+ "windows-sys 0.60.2",
]
[[package]]
name = "anyhow"
-version = "1.0.102"
+version = "1.0.104"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
+checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470"
[[package]]
name = "arc-swap"
@@ -116,7 +116,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -127,7 +127,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -256,7 +256,7 @@ dependencies = [
"proc-macro2",
"quote",
"rustversion",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -307,6 +307,17 @@ version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
+[[package]]
+name = "chacha20"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81"
+dependencies = [
+ "cfg-if",
+ "cpufeatures 0.3.0",
+ "rand_core 0.10.1",
+]
+
[[package]]
name = "chrono"
version = "0.4.44"
@@ -352,7 +363,7 @@ dependencies = [
"heck",
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -411,6 +422,15 @@ dependencies = [
"libc",
]
+[[package]]
+name = "cpufeatures"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201"
+dependencies = [
+ "libc",
+]
+
[[package]]
name = "crc32fast"
version = "1.5.0"
@@ -447,9 +467,9 @@ dependencies = [
[[package]]
name = "crossbeam-epoch"
-version = "0.9.18"
+version = "0.9.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
+checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f"
dependencies = [
"crossbeam-utils",
]
@@ -496,6 +516,16 @@ dependencies = [
"darling_macro 0.23.0",
]
+[[package]]
+name = "darling"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed17f5901b6630b993ca003def43f2f8ef4014fc13b047b57aad617ff32bc2ec"
+dependencies = [
+ "darling_core 0.24.1",
+ "darling_macro 0.24.1",
+]
+
[[package]]
name = "darling_core"
version = "0.20.11"
@@ -507,7 +537,7 @@ dependencies = [
"proc-macro2",
"quote",
"strsim",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -520,7 +550,20 @@ dependencies = [
"proc-macro2",
"quote",
"strsim",
- "syn",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6837e2cf7485aaae18f86181d2f0e9a7ed297a025e220aeabf63fdebd3a2ddff"
+dependencies = [
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn 3.0.3",
]
[[package]]
@@ -531,7 +574,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
dependencies = [
"darling_core 0.20.11",
"quote",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -542,7 +585,18 @@ checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d"
dependencies = [
"darling_core 0.23.0",
"quote",
- "syn",
+ "syn 2.0.117",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ac7135c3ef02b2f7833bbeb1be5ba7f966dcde8a87c6b87f65a778d71a02785"
+dependencies = [
+ "darling_core 0.24.1",
+ "quote",
+ "syn 3.0.3",
]
[[package]]
@@ -586,7 +640,7 @@ dependencies = [
"darling 0.20.11",
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -596,7 +650,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c"
dependencies = [
"derive_builder_core",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -648,7 +702,7 @@ dependencies = [
"libc",
"option-ext",
"redox_users 0.5.2",
- "windows-sys 0.61.2",
+ "windows-sys 0.59.0",
]
[[package]]
@@ -659,7 +713,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -714,7 +768,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
dependencies = [
"libc",
- "windows-sys 0.61.2",
+ "windows-sys 0.59.0",
]
[[package]]
@@ -857,7 +911,7 @@ checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -928,11 +982,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
dependencies = [
"cfg-if",
- "js-sys",
"libc",
"r-efi 5.3.0",
"wasip2",
- "wasm-bindgen",
]
[[package]]
@@ -942,17 +994,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555"
dependencies = [
"cfg-if",
+ "js-sys",
"libc",
"r-efi 6.0.0",
+ "rand_core 0.10.1",
"wasip2",
"wasip3",
+ "wasm-bindgen",
]
[[package]]
name = "h2"
-version = "0.4.14"
+version = "0.4.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "171fefbc92fe4a4de27e0698d6a5b392d6a0e333506bc49133760b3bcf948733"
+checksum = "839c0e8a181239723652be9062bb56ca5bf5f64011f73b623f6f4fc59086a228"
dependencies = [
"atomic-waker",
"bytes",
@@ -1172,7 +1227,7 @@ dependencies = [
"libc",
"percent-encoding",
"pin-project-lite",
- "socket2 0.6.3",
+ "socket2 0.5.10",
"system-configuration",
"tokio",
"tower-service",
@@ -1609,7 +1664,7 @@ version = "0.50.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
dependencies = [
- "windows-sys 0.61.2",
+ "windows-sys 0.59.0",
]
[[package]]
@@ -1678,7 +1733,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -1805,7 +1860,7 @@ checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -1864,7 +1919,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
dependencies = [
"proc-macro2",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -1896,7 +1951,7 @@ dependencies = [
"itertools",
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -1943,7 +1998,7 @@ dependencies = [
"quinn-udp",
"rustc-hash",
"rustls",
- "socket2 0.6.3",
+ "socket2 0.5.10",
"thiserror 2.0.18",
"tokio",
"tracing",
@@ -1952,14 +2007,15 @@ dependencies = [
[[package]]
name = "quinn-proto"
-version = "0.11.14"
+version = "0.11.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098"
+checksum = "04759210543be93709136e28212294a659ef5001836ff4eab4d663e4529bba83"
dependencies = [
"bytes",
- "getrandom 0.3.4",
+ "getrandom 0.4.2",
"lru-slab",
- "rand 0.9.4",
+ "rand 0.10.2",
+ "rand_pcg",
"ring",
"rustc-hash",
"rustls",
@@ -1980,7 +2036,7 @@ dependencies = [
"cfg_aliases",
"libc",
"once_cell",
- "socket2 0.6.3",
+ "socket2 0.5.10",
"tracing",
"windows-sys 0.60.2",
]
@@ -2013,18 +2069,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a"
dependencies = [
"libc",
- "rand_chacha 0.3.1",
+ "rand_chacha",
"rand_core 0.6.4",
]
[[package]]
name = "rand"
-version = "0.9.4"
+version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea"
+checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80"
dependencies = [
- "rand_chacha 0.9.0",
- "rand_core 0.9.5",
+ "chacha20",
+ "getrandom 0.4.2",
+ "rand_core 0.10.1",
]
[[package]]
@@ -2037,16 +2094,6 @@ dependencies = [
"rand_core 0.6.4",
]
-[[package]]
-name = "rand_chacha"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
-dependencies = [
- "ppv-lite86",
- "rand_core 0.9.5",
-]
-
[[package]]
name = "rand_core"
version = "0.6.4"
@@ -2058,12 +2105,9 @@ dependencies = [
[[package]]
name = "rand_core"
-version = "0.9.5"
+version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c"
-dependencies = [
- "getrandom 0.3.4",
-]
+checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69"
[[package]]
name = "rand_distr"
@@ -2075,6 +2119,15 @@ dependencies = [
"rand 0.8.6",
]
+[[package]]
+name = "rand_pcg"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a"
+dependencies = [
+ "rand_core 0.10.1",
+]
+
[[package]]
name = "rayon"
version = "1.12.0"
@@ -2208,7 +2261,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -2304,13 +2357,13 @@ dependencies = [
[[package]]
name = "rmcp"
-version = "1.6.0"
+version = "3.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e12ca9067b5ebfbd5b3fcdc4acfceb81aa7d5ab2a879dff7cb75d22434276aad"
+checksum = "1a15bc53261a9dc37e105df006e4656c598379a8f9581f8950debb130f27a7cf"
dependencies = [
- "async-trait",
"chrono",
"futures",
+ "indexmap 2.14.0",
"pastey",
"pin-project-lite",
"rmcp-macros",
@@ -2321,19 +2374,20 @@ dependencies = [
"tokio",
"tokio-util",
"tracing",
+ "uuid",
]
[[package]]
name = "rmcp-macros"
-version = "1.6.0"
+version = "3.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7caa6743cc0888e433105fe1bc551a7f607940b126a37bc97b478e86064627eb"
+checksum = "a85d45508e9b4ba024fe996c2638799635d75b6dd0ba8f32ccf08f8026f0c780"
dependencies = [
- "darling 0.23.0",
+ "darling 0.24.1",
"proc-macro2",
"quote",
"serde_json",
- "syn",
+ "syn 3.0.3",
]
[[package]]
@@ -2390,7 +2444,7 @@ dependencies = [
"errno",
"libc",
"linux-raw-sys",
- "windows-sys 0.61.2",
+ "windows-sys 0.59.0",
]
[[package]]
@@ -2494,7 +2548,7 @@ dependencies = [
"proc-macro2",
"quote",
"serde_derive_internals",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -2569,7 +2623,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -2580,7 +2634,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -2615,7 +2669,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
dependencies = [
"cfg-if",
- "cpufeatures",
+ "cpufeatures 0.2.17",
"digest",
]
@@ -2704,7 +2758,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e"
dependencies = [
"libc",
- "windows-sys 0.61.2",
+ "windows-sys 0.60.2",
]
[[package]]
@@ -2745,6 +2799,17 @@ dependencies = [
"unicode-ident",
]
+[[package]]
+name = "syn"
+version = "3.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
[[package]]
name = "sync_wrapper"
version = "1.0.2"
@@ -2762,7 +2827,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -2942,7 +3007,7 @@ dependencies = [
"getrandom 0.4.2",
"once_cell",
"rustix",
- "windows-sys 0.61.2",
+ "windows-sys 0.59.0",
]
[[package]]
@@ -2971,7 +3036,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -2982,7 +3047,7 @@ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -3075,7 +3140,7 @@ checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -3240,7 +3305,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -3453,7 +3518,7 @@ dependencies = [
"bumpalo",
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
"wasm-bindgen-shared",
]
@@ -3585,7 +3650,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -3596,7 +3661,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -3901,7 +3966,7 @@ dependencies = [
"heck",
"indexmap 2.14.0",
"prettyplease",
- "syn",
+ "syn 2.0.117",
"wasm-metadata",
"wit-bindgen-core",
"wit-component",
@@ -3917,7 +3982,7 @@ dependencies = [
"prettyplease",
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
"wit-bindgen-core",
"wit-bindgen-rust",
]
@@ -3984,7 +4049,7 @@ checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
"synstructure",
]
@@ -4005,7 +4070,7 @@ checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
]
[[package]]
@@ -4025,7 +4090,7 @@ checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
"synstructure",
]
@@ -4065,7 +4130,7 @@ checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.117",
]
[[package]]
diff --git a/Cargo.toml b/Cargo.toml
index 59e6f65..131f235 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -17,7 +17,7 @@ exclude = ["target/", "scripts/__pycache__/"]
[dependencies]
# Official MCP Rust SDK: https://github.com/modelcontextprotocol/rust-sdk — see docs/MCP_STACK_RESEARCH.md
-rmcp = { version = "1.6.0", default-features = false, features = [
+rmcp = { version = "3.1.4", default-features = false, features = [
"server",
"macros",
"schemars",
diff --git a/scripts/client_compat_check.py b/scripts/client_compat_check.py
index 3b7fef7..27b856f 100755
--- a/scripts/client_compat_check.py
+++ b/scripts/client_compat_check.py
@@ -10,7 +10,13 @@
import time
from pathlib import Path
-PROTOCOL_VERSIONS = ("2024-11-05", "2025-03-26", "2025-06-18")
+PROTOCOL_VERSIONS = (
+ "2024-11-05",
+ "2025-03-26",
+ "2025-06-18",
+ "2025-11-25",
+ "2026-07-28",
+)
EXPECTED_SERVER_NAME = "reasonkit-think-mcp"
diff --git a/src/main.rs b/src/main.rs
index f911396..617d9dc 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -2398,10 +2398,7 @@ impl ThinkServer {
if let Some(problem) = input.problem {
lines.push(format!("Problem: {problem}"));
}
- GetPromptResult::new(vec![PromptMessage::new_text(
- PromptMessageRole::User,
- lines.join("\n"),
- )])
+ GetPromptResult::new(vec![PromptMessage::new_text(Role::User, lines.join("\n"))])
}
#[prompt(
@@ -2418,7 +2415,7 @@ impl ThinkServer {
let text = format!(
"Plan with explicit branches.\n1) Create 3-5 candidate branches.\n2) Score each on correctness, risk, and evidence.\n3) Prune weak branches but preserve diversity.\n4) Verify critical claims before final answer.\nProblem: {problem}"
);
- GetPromptResult::new(vec![PromptMessage::new_text(PromptMessageRole::User, text)])
+ GetPromptResult::new(vec![PromptMessage::new_text(Role::User, text)])
}
#[prompt(
@@ -2441,7 +2438,7 @@ impl ThinkServer {
5) Score, verify critical claims, run a checkpoint, then converge with GoT merge/distill before consensus.\n\
Problem: {problem}"
);
- GetPromptResult::new(vec![PromptMessage::new_text(PromptMessageRole::User, text)])
+ GetPromptResult::new(vec![PromptMessage::new_text(Role::User, text)])
}
#[prompt(
@@ -2456,7 +2453,7 @@ Problem: {problem}"
"Apply these lenses independently then synthesize: Optimist, Pessimist, Systems Thinker, Empiricist, Contrarian, Security Adversary, Simplifier.\nTopic: {}",
input.problem.unwrap_or_else(|| "General topic".to_string())
);
- GetPromptResult::new(vec![PromptMessage::new_text(PromptMessageRole::User, text)])
+ GetPromptResult::new(vec![PromptMessage::new_text(Role::User, text)])
}
#[prompt(
@@ -2471,7 +2468,7 @@ Problem: {problem}"
"Use Chain-of-Verification: draft -> verification questions -> independent answers -> revised final.\nTarget: {}",
input.problem.unwrap_or_else(|| "Current draft".to_string())
);
- GetPromptResult::new(vec![PromptMessage::new_text(PromptMessageRole::User, text)])
+ GetPromptResult::new(vec![PromptMessage::new_text(Role::User, text)])
}
#[prompt(
@@ -2488,7 +2485,7 @@ Problem: {problem}"
.problem
.unwrap_or_else(|| "Current answer".to_string())
);
- GetPromptResult::new(vec![PromptMessage::new_text(PromptMessageRole::User, text)])
+ GetPromptResult::new(vec![PromptMessage::new_text(Role::User, text)])
}
#[prompt(
@@ -2505,7 +2502,7 @@ Problem: {problem}"
.problem
.unwrap_or_else(|| "Current deliberation".to_string())
);
- GetPromptResult::new(vec![PromptMessage::new_text(PromptMessageRole::User, text)])
+ GetPromptResult::new(vec![PromptMessage::new_text(Role::User, text)])
}
#[prompt(
@@ -2522,7 +2519,7 @@ Problem: {problem}"
.problem
.unwrap_or_else(|| "Current deliberation".to_string())
);
- GetPromptResult::new(vec![PromptMessage::new_text(PromptMessageRole::User, text)])
+ GetPromptResult::new(vec![PromptMessage::new_text(Role::User, text)])
}
#[prompt(
@@ -2539,7 +2536,7 @@ Problem: {problem}"
.problem
.unwrap_or_else(|| "Current deliberation".to_string())
);
- GetPromptResult::new(vec![PromptMessage::new_text(PromptMessageRole::User, text)])
+ GetPromptResult::new(vec![PromptMessage::new_text(Role::User, text)])
}
#[prompt(
@@ -2556,7 +2553,7 @@ Problem: {problem}"
.problem
.unwrap_or_else(|| "Current deliberation".to_string())
);
- GetPromptResult::new(vec![PromptMessage::new_text(PromptMessageRole::User, text)])
+ GetPromptResult::new(vec![PromptMessage::new_text(Role::User, text)])
}
#[prompt(
@@ -2580,7 +2577,7 @@ Problem: {problem}"
6) Final answer must name the winning feature, runner-up, rejected alternatives, exact evidence used, uncertainty, and route decision.\n\
Do not fabricate feature names, TODO status, effort, dependencies, or implementation claims."
);
- GetPromptResult::new(vec![PromptMessage::new_text(PromptMessageRole::User, text)])
+ GetPromptResult::new(vec![PromptMessage::new_text(Role::User, text)])
}
}
@@ -2633,7 +2630,7 @@ impl ServerHandler for ThinkServer {
&self,
request: ReadResourceRequestParams,
_context: RequestContext,
- ) -> impl std::future::Future