MCP服务器和客户端示例(JavaScript+.NET)
此存储库演示了模型上下文协议(MCP)在以下两种情况下的实现 JavaScript 和 .NET,展示跨平台互操作性。这两种实现都提供了相同的临床风险评估工具,并且可以无缝地相互通信。
项目结构
mcp_poc/
├── mcp-js-server/ # JavaScript MCP Server (Express)
├── mcp-js-client/ # JavaScript MCP Client (LangChain + OpenAI)
├── mcp-dotnet-server/ # .NET MCP Server (ASP.NET Core) ✅
├── mcp-dotnet-client/ # .NET MCP Client (Microsoft.Extensions.AI) ✅
└── DOTNET_IMPLEMENTATION.md # Detailed .NET implementation guide特性
实现
JavaScript和。NET实现提供:
MCP服务器 (mcp-js-server/ & mcp-dotnet-server/)
- ✅ 临床风险评估工具 通过MCP协议
- ✅ HTTP/JSON-RPC端点 便于集成
- ✅ 三个相同的工具:
- calculate_risk_score -根据年龄和共病计数计算临床风险评分 - get_patient_health_conditions -检索患者的健康状况 - get_patient_summary -返回完整的患者人口统计和病情摘要
MCP客户端 (mcp-js-client/ & mcp-dotnet-client/)
- ✅ LLM集成 使用OpenAI/Azure OpenAI
- ✅ 自动工具发现 来自MCP服务器
- ✅ LLM电动工具调用 -AI决定何时以及如何使用工具
- ✅ 多种测试场景 演示实际使用情况
跨平台互操作性
- 🔄 JavaScript客户端 ↔ JavaScript服务器 ✅
- 🔄 JavaScript客户端 ↔ .NET服务器 ✅
- 🔄 .NET客户端 ↔ .NET服务器 ✅
- 🔄 .NET客户端 ↔ JavaScript服务器 ✅
先决条件
用于JavaScript实现
- Node.js v20+
- npm或纱线
为了。NET实现
- .NET 8.0 SDK或更高版本
- Visual Studio 2022、VS Code或Rider(可选)
对于两者
- OpenAI API密钥或Azure OpenAI凭据
设置
1.克隆存储库
git clone git@github.com:kumarchitta/mcp_js_example.git
cd mcp_js_example2.JavaScript设置
安装服务器依赖项
cd mcp-js-server
npm install安装客户端依赖项
cd ../mcp-js-client
npm install配置环境变量
创建一个 .env 文件在 mcp-js-client/:
# For OpenAI
OPENAI_API_KEY=your_openai_api_key
MODEL_PROVIDER=openai
# OR for Azure OpenAI
# MODEL_PROVIDER=azure
# AZURE_API_KEY=your_azure_api_key
# AZURE_ENDPOINT=https://your-resource.openai.azure.com
# AZURE_DEPLOYMENT_NAME=gpt-4o3.NET安装程序
还原服务器依赖关系
cd mcp-dotnet-server/McpDotnetServer
dotnet restore还原客户端依赖关系
cd ../../mcp-dotnet-client/McpDotnetClient
dotnet restore配置设置
编辑 appsettings.json 在 mcp-dotnet-client/McpDotnetClient/:
{
"MODEL_PROVIDER": "openai",
"OPENAI_API_KEY": "your-openai-api-key",
"MCP_SERVER_URL": "http://localhost:8080/mcp"
}用法
选项1:JavaScript堆栈
启动JavaScript MCP服务器
cd mcp-js-server
npm run dev运行JavaScript MCP客户端
在新终端中:
cd mcp-js-client
npm run dev选项2:。NET堆栈
开始。NET MCP服务器
cd mcp-dotnet-server/McpDotnetServer
dotnet run快跑。NET MCP客户端
在新终端中:
cd mcp-dotnet-client/McpDotnetClient
dotnet run选项3:混合堆栈(演示互操作性)
JavaScript客户端→ .服务器
# Terminal 1: Start .NET Server
cd mcp-dotnet-server/McpDotnetServer
dotnet run
# Terminal 2: Run JavaScript Client
cd mcp-js-client
MCP_SERVER_URL=http://localhost:8080/mcp npm run dev.NET客户端→ JavaScript服务器
# Terminal 1: Start JavaScript Server
cd mcp-js-server
PORT=3000 npm start
# Terminal 2: Run .NET Client (update appsettings.json MCP_SERVER_URL to http://localhost:3000/mcp)
cd mcp-dotnet-client/McpDotnetClient
dotnet run客户在做什么
双方客户将:
- 连接到MCP服务器
- 加载可用工具
- 运行6个测试查询,演示LLM+MCP集成
- 显示结果和工具调用
输出示例
✅ Loaded 3 tools from MCP server:
• calculate_risk_score — Compute a clinical risk score from age and comorbidity count.
• get_patient_health_conditions — Retrieve known health conditions for a patient.
• get_patient_summary — Return demographic and condition summary for a patient.
📝 Test 1/6:
Query: "Calculate the risk score for a 72-year-old patient with 5 comorbidities."
✨ Final LLM Response: The risk score for a 72-year-old patient with 5 comorbidities is 39.4, which falls into the "medium" risk category.模拟数据
服务器包括模拟患者数据:
- P001:爱丽丝·约翰逊(68岁,3种合并症)
- P002:罗伯特·史密斯(45岁,1例合并症)
- P003:玛丽亚·洛佩兹(72岁,5种合并症)
API直接测试
您还可以直接使用curl测试服务器:
# Query patient health conditions
curl -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_patient_health_conditions",
"arguments": { "patientId": "P001" }
}
}'MCP检查员
npx @modelcontextprotocol/inspector建筑
JavaScript堆栈
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ │ │ │ │ │
│ OpenAI/ │◄────────│ MCP Client │◄────────│ MCP Server │
│ Azure │ Tools │ (LangChain)│ HTTP │ (Express) │
│ │ │ │ │ │
└─────────────┘ └─────────────┘ └─────────────┘
│ │
Decides when Executes
to call tools clinical tools.NET堆栈
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ │ │ │ │ │
│ OpenAI/ │◄────────│ MCP Client │◄────────│ MCP Server │
│ Azure │ Tools │(MS.Ext.AI) │HTTP/SSE │(ASP.NET Core│
│ │ │ │ │ │
└─────────────┘ └─────────────┘ └─────────────┘
│ │
Decides when Executes
to call tools clinical tools跨平台互操作性⭐
JavaScript Client ─────┐
├──► JavaScript Server
.NET Client ─────┘ OR
.NET Server两种实现都使用相同的MCP协议,确保了完全的互操作性!
使用的技术
JavaScript堆栈
- @模型上下文协议/sdk -MCP协议实现
- @朗肯/奥派 -LangChain OpenAI集成
- @langchain/核心 -LangChain核心工具
- 快速 -HTTP服务器
- 萨德 -架构验证
.NET堆栈
- 模型上下文协议SDK -官方C#MCP SDK(微软/Anthropic合作)
- 模型上下文协议。AspNetCore -ASP。NET核心集成
- 微软。扩展。人工智能 -AI抽象层
- Azure。好的 -Azure OpenAI客户端
- OpenAI SDK -OpenAI客户端
主要区别
| 特性 | JavaScript | 。NET |
|---|---|---|
| 服务器框架 | Express.js | ASP。NET核心最低API |
| 工具定义 | 普通函数 | 基于属性([McpServerTool]) |
| 类型安全 | 运行时(JSDoc) | 编译时(C#类型) |
| 响应格式 | JSON | 服务器发送事件(SSE) |
| 客户端集成 | LangChain | 微软。扩展。AI |
| 部署 | Node.js运行时 | 原生/Docker/云 |
每次实施的好处
JavaScript
- ✅ 快速开发和迭代
- ✅ 广泛的npm生态系统
- ✅ 易于上手
- ✅ 大型社区和实例
.NET
- ✅ 编译时型安全
- ✅ 更好的性能(本机编译)
- ✅ 企业功能(DI、日志记录、健康检查)
- ✅ 强大的工具(Visual Studio、Rider)
- ✅ 易于容器化和云部署
快速测试
测试JavaScript服务器
cd mcp-js-server
npm start
# In another terminal
curl http://localhost:8080/health测试。服务器
cd mcp-dotnet-server/McpDotnetServer
dotnet run
# In another terminal
curl http://localhost:8080/health直接测试MCP协议
# Test tools/list endpoint
curl -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
# Test calculate_risk_score tool
curl -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc":"2.0",
"id":2,
"method":"tools/call",
"params":{
"name":"calculate_risk_score",
"arguments":{"age":72,"comorbidityCount":5}
}
}'文档
- 主要文件:此自述文件
- 详细的。NET指南: DOTNET_实施.md
- .NET服务器: mcp目录服务器/README.md
- .NET客户端: mcp客户端/README.md
实施状态
| 组件 | 语言 | 状态 | 注释 |
|---|---|---|---|
| MCP服务器 | JavaScript | ✅ 完成 | Express.js,JSON响应 |
| MCP服务器 | 。NET | ✅ 完成 | ASP。NET Core、SSE响应 |
| MCP客户端 | JavaScript | ✅ 完成 | LangChain集成 |
| MCP客户端 | 。NET | ✅ 完成 | 微软。扩展。AI集成 |
| 互操作性 | 两者都有 | ✅ 已验证 | 所有组合均已测试 |
是什么让这个特别
此存储库演示了:
- 语言不可知协议:相同的MCP协议适用于JavaScript和。网
- 完全互操作性:任何客户端都可以与任何服务器通信,无论语言如何
- 生产就绪:两种实现都使用官方SDK和最佳实践
- 真实世界示例:集成LLM的医疗风险评估工具
- 现代科技:最新。NET 8、Node.js 20+、OpenAI GPT-4o
后续步骤
- ✅ 探索这两个实现中的代码
- ✅ 运行示例并查看MCP的运行情况
- ✅ 尝试将JavaScript和。NET组件
- 📚 阅读 DOTNET_实施.md 详细。NET指南
- 🔧 根据自己的用例调整工具
- 🚀 部署到生产环境(Docker、Azure、AWS等)
许可证
国际学生委员会
作者
阿斯瓦尼·库马尔·奇塔
