MCP CLI-模型上下文协议命令行界面
用于与模型上下文协议(MCP)服务器交互的通用命令行界面,由构建。净10.0。
快速开始
先决条件
- .NET 10.0 SDK或更高版本
构建并运行
cd McpCli
dotnet build
dotnet run # Interactive mode
dotnet run -- --script ../example-script.txt # Script mode
dotnet run -- --help # Show help特性
- 交互式REPL模式:用于实时MCP服务器交互的命令提示符
- 脚本执行:从支持注释的文本文件运行批处理命令
- 高级命令处理:系统。基于命令行的解析和验证
- 服务器管理:连接、断开连接和管理多个MCP服务器
- 基于配置:基于JSON的服务器配置,支持环境变量
- 原住民。NET日志记录:微软。扩展。使用控制台输出进行日志记录
- 依赖注入:建立在微软之上。扩展。托管
- 现代。网:目标。NET 10.0,具有最新的C#功能
可用命令(REPL)
核心命令
| 命令 | 别名 | 描述 |
|---|---|---|
help | - | 显示可用命令 |
list | ls | 列出所有已配置的MCP服务器 |
status | - | 显示连接状态和所选服务器 |
exit, quit | - | 退出应用程序 |
服务器连接
| 命令 | 描述 |
|---|---|
connect [--no-select] | 连接到MCP服务器(除非使用--no select,否则自动选择) |
disconnect | 断开与MCP服务器的连接 |
use [server] | 选择服务器作为默认服务器(如果省略,则清除选择) |
服务器资源
所有资源命令都支持可选的服务器参数。如果未指定,则使用所选服务器或单个连接的服务器。
| 命令 | 描述 |
|---|---|
tools list [server] | 列出可用工具 |
tools call [server] [--args ] | 调用工具 |
resources list [server] | 列出可用资源 |
resources read [server] | 阅读资源 |
prompts list [server] | 列出可用提示 |
| `prompts get | |
| [server] [--args ]` | 获得提示 |
服务器选择
CLI支持灵活的服务器选择,以简化多服务器工作流程:
自动选择
当您连接到服务器时,它会自动选择为默认值:
mcp> connect everything
Connecting to MCP server 'everything'...
Successfully connected to 'everything'
mcp:everything>提示显示所选服务器名称(mcp:servername>),明确哪些服务器命令将作为目标。
显式选择
使用 use 更改所选服务器的命令:
mcp> connect server1
mcp:server1> connect server2
mcp:server1> use server2
Now using server 'server2' as default.
mcp:server2>清除选择
呼叫 use 没有论据来清除选择:
mcp:everything> use
Server selection cleared. Will use single connected server if available.
mcp>选择退出自动选择
使用 --no-select 如果您不想自动选择,请在连接时:
mcp> connect server1 --no-select
Connecting to MCP server 'server1'...
Successfully connected to 'server1'
mcp>隐式服务器解析
执行命令时,服务器按以下顺序解析:
- 明确规定 -如果在命令中提供服务器名称
- 所选服务器 -如果你用过
use选择服务器的命令 - 单连接 -如果只连接了一台服务器
- 错误 -如果连接了多个服务器,但未选择任何服务器
示例:
# Using selected server
mcp:everything> tools list
Listing tools from server 'everything'...
# Explicitly specifying server
mcp:everything> tools list other-server
Listing tools from server 'other-server'...
# Multiple servers without selection
mcp> connect server1 --no-select
mcp> connect server2 --no-select
mcp> tools list
Error: Multiple servers connected (server1, server2). Please specify server or use 'use ' to set a default.命令行选项
| 选项 | 别名 | 描述 |
|---|---|---|
--script | -s | 执行脚本文件中的命令 |
--log-level | -l | 设置日志级别(跟踪、调试、信息、警告、错误、严重) |
--config | -c | 使用自定义配置文件 |
--help | -h, -? | 显示帮助信息 |
--version | - | 显示版本信息 |
配置
通过以下方式配置应用程序 appsettings.json:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"System": "Warning"
}
},
"MaxHistoryItems": 100,
"McpServers": {
"my-server": {
"Name": "my-server",
"Command": "node",
"Args": ["path/to/server.js"],
"Env": {},
"Description": "My MCP server",
"AutoConnect": false
}
}
}配置部分
日志记录 -标准。NET日志配置(由Microsoft.Extensions.logging自动使用):
Default:应用程序代码的基本日志级别Microsoft:Microsoft框架库的日志级别System:系统库的日志级别
McpServers -MCP服务器配置词典:
Name:服务器的唯一标识符Command:启动服务器的可执行文件Args:命令行参数为数组Env:环境变量作为键值对Description:列表中显示的可选描述AutoConnect:启动时自动连接(尚未实现)
环境变量
使用环境变量覆盖配置 MCPCLI_ 前缀:
$env:MCPCLI_Logging__LogLevel__Default="Debug"
$env:MCPCLI_McpServers__myserver__Command="node"脚本文件
每行使用一个命令创建文本文件。使用 # 评论:
# example-script.txt
list
status
help执行方式:
dotnet run -- --script example-script.txt示例会话
PS> dotnet run
MCP CLI starting...
╔══════════════════════════════════════╗
║ MCP CLI - Interactive Mode ║
║ Type 'help' for commands ║
║ Type 'exit' or 'quit' to exit ║
╚══════════════════════════════════════╝
mcp> list
Configured MCP Servers:
• everything [Disconnected] - This MCP server attempts to exercise all the features...
mcp> connect everything
Connecting to MCP server 'everything'...
Successfully connected to 'everything'
mcp:everything> status
Connected to 1 server(s):
• everything [SELECTED]
Default server: everything
mcp:everything> tools list
Listing tools from server 'everything'...
Available tools (10):
• echo - Echoes back the input
• add - Adds two numbers
• longRunningOperation - Demonstrates a long running operation
...
mcp:everything> tools call echo --args '{"message":"Hello MCP!"}'
Calling tool 'echo' on server 'everything'...
Result:
Tool calling not yet fully implemented for 'echo'
mcp:everything> use
Server selection cleared. Will use single connected server if available.
mcp> exit
Goodbye!技术栈
| 组件 | 技术 | 目的 |
|---|---|---|
| 运行时 | 。NET 10.0 | 最新版本。NET平台 |
| 托管 | 微软。扩展。托管 | 应用程序生命周期和DI |
| CLI解析 | 系统。CommandLine 2.0 | 应用程序和REPL命令解析 |
| 日志 | 微软。扩展。日志记录 | 本机。NET日志记录 |
| MCP SDK | ModelContextProtocol 0.4.0-preview.3 | MCP客户端(已准备好进行第2阶段) |
| 配置 | Microsoft。扩展。配置 | 设置管理 |
项目结构
c:\src\dotnetMcpCli\
├── McpCli/
│ ├── Models/
│ │ ├── AppConfiguration.cs # App-level settings
│ │ └── McpServerConfig.cs # Server configuration model
│ ├── Services/
│ │ ├── IConsoleService.cs # Console I/O interface
│ │ ├── ConsoleService.cs # Console implementation
│ │ ├── IMcpConnectionManager.cs # MCP connection interface
│ │ └── McpConnectionManager.cs # MCP connection implementation
│ ├── CliOptions.cs # CLI options model
│ ├── McpCliHostedService.cs # REPL & script executor
│ ├── Program.cs # Application entry point
│ ├── appsettings.json # Configuration
│ └── McpCli.csproj # Project file
├── example-script.txt # Example command script
├── README.md # User documentation (this file)
├── ARCHITECTURE.md # Developer documentation
└── .gitignore # Git ignore rules发展
有关架构细节、设计决策和开发路线图,请参阅 建筑.md.
许可证
\[在此处指定您的许可证\]
