增加 Sampling(委托生成)功能 + 版本兼容和协商 + 兼容古老协议 + In-Process 进程内协议 + IPC 协议#7
Open
walterlv wants to merge 76 commits into
Open
增加 Sampling(委托生成)功能 + 版本兼容和协商 + 兼容古老协议 + In-Process 进程内协议 + IPC 协议#7walterlv wants to merge 76 commits into
walterlv wants to merge 76 commits into
Conversation
There was a problem hiding this comment.
Pull request overview
本 PR 为 DotNetCampus.ModelContextProtocol 增加 Sampling(服务器向客户端委托生成 / sampling/createMessage)能力,贯通能力协商、服务器侧发起请求、客户端侧处理并回包,以及在不同传输层(HTTP/SSE、STDIO 等)下的请求/响应路由。
Changes:
- 新增服务器侧 Sampling API(
IMcpServerSampling)与对应异常类型,并将 Sampling 注入到工具调用上下文中 - 客户端侧新增 Sampling handler 配置(
McpClientBuilder.WithSamplingHandler),并在传输层支持“服务器主动请求”的入站处理与回包 - 更新 HTTP/STDIO 等传输层以区分并路由 JSON-RPC request vs response,并补充集成测试与 sample 工具演示
Reviewed changes
Copilot reviewed 34 out of 34 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/DotNetCampus.ModelContextProtocol.Tests/TestMcpFactory.cs | 扩展测试工厂:允许额外配置客户端 builder 以支持 Sampling 测试场景 |
| tests/DotNetCampus.ModelContextProtocol.Tests/Servers/SamplingTests.cs | 新增 Sampling 端到端集成测试(服务端工具触发、客户端 handler 响应、能力检测) |
| tests/DotNetCampus.ModelContextProtocol.Tests/McpTools/SamplingTool.cs | 新增测试用服务端工具:通过 context.Sampling 发起 sampling/createMessage |
| src/DotNetCampus.ModelContextProtocol/Transports/Stdio/StdioServerTransportSession.cs | STDIO 会话支持服务器侧发起请求并等待响应(pending 请求表、写锁、响应路由) |
| src/DotNetCampus.ModelContextProtocol/Transports/Stdio/StdioServerTransport.cs | STDIO server run loop 增加 response 检测与注入 Sampling/session 服务 |
| src/DotNetCampus.ModelContextProtocol/Transports/Stdio/StdioClientTransport.cs | STDIO client run loop 支持解析服务器发起的请求并转交客户端处理 |
| src/DotNetCampus.ModelContextProtocol/Transports/ServerTransportManager.cs | 统一使用内部 JSON 上下文;新增从内存解析 JSON-RPC response 的能力 |
| src/DotNetCampus.ModelContextProtocol/Transports/IServerTransportSession.cs | 扩展传输层会话:保存客户端能力、支持 SendRequest/HandleResponse |
| src/DotNetCampus.ModelContextProtocol/Transports/IServerTransportManager.cs | 新增 ReadResponseAsync(ReadOnlyMemory<byte>) 供传输层路由 response |
| src/DotNetCampus.ModelContextProtocol/Transports/IClientTransportManager.cs | 新增 HandleServerRequestAsync:处理服务器主动请求并回送响应 |
| src/DotNetCampus.ModelContextProtocol/Transports/Http/LocalHostHttpServerTransportSession.cs | HTTP session 增加服务器发起请求等待/响应路由(pending 请求表) |
| src/DotNetCampus.ModelContextProtocol/Transports/Http/LocalHostHttpServerTransport.cs | POST body 支持区分 request/response;response 路由回 session;注入 transport session 服务 |
| src/DotNetCampus.ModelContextProtocol/Transports/Http/HttpClientTransport.cs | SSE message 分流:服务器请求进入 HandleServerRequestAsync,响应进入原响应处理链路 |
| src/DotNetCampus.ModelContextProtocol/Transports/ClientTransportManager.cs | 客户端传输管理器增加 Sampling handler 与服务器请求处理/回包逻辑 |
| src/DotNetCampus.ModelContextProtocol/Servers/McpServerSampling.cs | 新增服务器侧 Sampling 抽象与实现(通过 transport session 发起 sampling/createMessage) |
| src/DotNetCampus.ModelContextProtocol/Servers/McpServerRequestHandlers.cs | Initialize 时将客户端 capabilities 写入当前 transport session,供 Sampling 支持检测 |
| src/DotNetCampus.ModelContextProtocol/Servers/McpProtocolBridge.cs | 切换到统一的内部 JSON 上下文(请求参数/响应结果) |
| src/DotNetCampus.ModelContextProtocol/Servers/IMcpServerPrimitiveContext.cs | 工具上下文新增 Sampling 属性,并在实现中按服务解析/回退 NotSupported 实现 |
| src/DotNetCampus.ModelContextProtocol/Protocol/Messages/Sampling.cs | Sampling 消息类型调整:使用通用 ContentBlock 替代原 SamplingMessageContent |
| src/DotNetCampus.ModelContextProtocol/Protocol/Messages/Role.cs | 枚举序列化属性调整为 JsonStringEnumMemberName |
| src/DotNetCampus.ModelContextProtocol/Protocol/Messages/ContentBlock.cs | ContentBlock 多态 discriminator 更新(tool_use/tool_result) |
| src/DotNetCampus.ModelContextProtocol/Hosting/Services/McpServiceCollectionTransportExtensions.cs | 新增扩展:统一注册 transport session + IMcpServerSampling 到 MCP scoped services |
| src/DotNetCampus.ModelContextProtocol/Exceptions/McpSamplingRejectedException.cs | 新增 Sampling 被用户拒绝的专用异常 |
| src/DotNetCampus.ModelContextProtocol/Exceptions/McpSamplingNotSupportedException.cs | 新增客户端未声明 Sampling 能力时的专用异常 |
| src/DotNetCampus.ModelContextProtocol/Exceptions/McpExceptionData.cs | 切换到统一的内部 JSON 上下文进行序列化 |
| src/DotNetCampus.ModelContextProtocol/CompilerServices/McpJsonContext.cs | 合并/统一为 McpInternalJsonContext 覆盖协议内所有序列化类型(含 Sampling) |
| src/DotNetCampus.ModelContextProtocol/Clients/McpClientBuilder.cs | 新增 WithSamplingHandler 配置并自动声明 capability;Build 时注入到 transport manager |
| src/DotNetCampus.ModelContextProtocol/Clients/McpClient.cs | 客户端 API 调用序列化上下文切换到 McpInternalJsonContext |
| src/DotNetCampus.ModelContextProtocol.TouchSocket.Http/Transports/TouchSocket/TouchSocketHttpServerTransportSession.cs | TouchSocket HTTP session 增加服务器发起请求等待/响应路由(pending 请求表) |
| src/DotNetCampus.ModelContextProtocol.TouchSocket.Http/Transports/TouchSocket/TouchSocketHttpServerTransport.cs | TouchSocket POST body 支持区分 request/response;response 路由回 session;注入 transport session 服务 |
| src/DotNetCampus.ModelContextProtocol.Ipc/Transports/Ipc/IpcServerTransportSession.cs | IPC session 增加 pending 请求与 response 路由结构(但发送实现仍待完善) |
| samples/DotNetCampus.SampleMcpServer/Program.cs | sample server 工具列表更新:加入 SamplingTool,并重命名/替换示例工具 |
| samples/DotNetCampus.SampleMcpServer/McpTools/SamplingTool.cs | 新增 sample 工具:人工验证 sampling/createMessage 流程与异常分支 |
| samples/DotNetCampus.SampleMcpServer/McpTools/EchoDelayTool.cs | 示例工具类重命名(SampleTool → EchoDelayTool) |
Co-authored-by: Copilot <copilot@github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.