SSWConsulting / SSWConsulting/TimePro.Tools

Upgrade ModelContextProtocol SDK to 2.x (MCP 2026-07-28)

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

Nobody has claimed this yet.

Priority: P2 Type: Feature
Dominant language
C#
Stars
3
Forks
0
Avg merge
29m
Merged PRs (30d)
28

Description

Scope

Directory.Packages.props pins ModelContextProtocol 1.4.0. The current stable is 2.2.0 (matches the 2026-07-28 protocol revision). Upgrade after the CLI/MCP unification epic (#38) lands, as a standalone dependency PR.

What we use, and expected impact

An API audit of the 2.2.0 package against this repo found no source-breaking change for our surface:

Used here Status in 2.x
[McpServerToolType], [McpServerTool] with ReadOnly/Destructive/Idempotent retained
AddMcpServer(), WithStdioServerTransport(), WithTools<T>() retained
Task<string> tools with [Description] and injected CancellationToken retained
HTTP/SSE transport, Roots, Sampling, MCP Logging, Tasks, raw JSON-RPC not used, so their breaking changes do not apply

This is an inspection result, not a compile. 2.2.0 requires Microsoft.Extensions 10.0.10 abstractions and Microsoft.Extensions.AI.Abstractions 10.8.3; the repo pins Microsoft.Extensions 10.0.9, so a restore conflict is possible and must be checked.

Client impact

  • Stdio config for Claude Code, Codex CLI, Claude Desktop and VS Code stays the same (tp mcp ...). No HTTP, port, or OAuth change.
  • 2.x keeps down-level interoperability: legacy clients still do initialize version negotiation, 2026-07-28 clients use discovery. Upgrading the server does not drop older clients, but each client must be tested at a recorded version.
  • Keep --tenant, --env, accounting gating, and stderr-only logging.

New capabilities to adopt afterwards, each in its own PR

  1. Structured output: UseStructuredContent = true with typed result records (already available in 1.4.x), keeping JSON text for older consumers.
  2. Tool annotations: mark reads ReadOnly, mark update/delete/cancel/import destructive. GetSuggestedTimesheets refreshes server state, so it is not read-only. Revisit Idempotent = true on import.
  3. Elicitation for confirmations on destructive tools, with a fallback for clients that do not support it.

Acceptance

  • Restore, build, unit, integration and NuGet audit green on 2.2.0
  • Stdio initialize (legacy) and discovery (new) both work; tools/list shows 18 default / 47 with accounting
  • Reads, errors, cancellation and shutdown exercised; writes only against fakes or staging
  • Four named clients tested and versions recorded in the PR

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

After CLI/MCP unification epic #38 lands, update the ModelContextProtocol pin in Directory.Packages.props from 1.4.0 to 2.2.0 and begin with restore to check the Microsoft.Extensions version conflict. Run the unit, integration, build, and NuGet audit checks, then exercise legacy initialize and new discovery over stdio with the four named clients; done means all acceptance checks pass and client versions are recorded.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp
Domain
cli, devtools
Issue type
Refactor
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.