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) |
src/DotNetCampus.ModelContextProtocol/Transports/Stdio/StdioServerTransportSession.cs
Show resolved
Hide resolved
src/DotNetCampus.ModelContextProtocol/Transports/ClientTransportManager.cs
Show resolved
Hide resolved
src/DotNetCampus.ModelContextProtocol.Ipc/Transports/Ipc/IpcServerTransportSession.cs
Outdated
Show resolved
Hide resolved
tests/DotNetCampus.ModelContextProtocol.Tests/TestMcpFactory.cs
Outdated
Show resolved
Hide resolved
src/DotNetCampus.ModelContextProtocol/Transports/Http/HttpServerTransportSession.cs
Show resolved
Hide resolved
src/DotNetCampus.ModelContextProtocol/Transports/Http/LocalHostHttpServerTransport.cs
Show resolved
Hide resolved
...delContextProtocol.TouchSocket.Http/Transports/TouchSocket/TouchSocketHttpServerTransport.cs
Show resolved
Hide resolved
src/DotNetCampus.ModelContextProtocol/Transports/Http/HttpClientTransport.cs
Outdated
Show resolved
Hide resolved
src/DotNetCampus.ModelContextProtocol/Transports/Stdio/StdioClientTransport.cs
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 45 out of 45 changed files in this pull request and generated 2 comments.
Comments suppressed due to low confidence (1)
src/DotNetCampus.ModelContextProtocol/Servers/IMcpServerPrimitiveContext.cs:12
- 此文件不在
Protocol/下,但仍保留了大量中英双语 XML 注释;仓库规范要求仅Protocol/下的消息类型使用双语注释,其他代码应为纯中文(见.github/copilot-instructions.md:45)。既然本次已改动该接口,建议一并将这些遗留英文注释清理为纯中文,避免继续扩散。
/// <summary>
/// 包含 MCP 服务器收到来自客户端的请求时,服务端处理请求具体实现可能会用到的各种上下文信息。<br/>
/// Contains various context information that the server-side implementation of the MCP server
/// may use when the MCP server receives a request from the client.
/// </summary>
src/DotNetCampus.ModelContextProtocol/Transports/ServerTransportManager.cs
Outdated
Show resolved
Hide resolved
src/DotNetCampus.ModelContextProtocol/Transports/ServerTransportManager.cs
Show resolved
Hide resolved
|
@copilot apply changes based on the comments in this thread |
Agent-Logs-Url: https://github.com/dotnet-campus/DotNetCampus.ModelContextProtocol/sessions/f1bdca63-ff02-48cb-97dc-c47e7d813b6b Co-authored-by: walterlv <9959623+walterlv@users.noreply.github.com>
已处理两个审查意见(commit
|
No description provided.