MCP协议工具包

一个用于发现、调用和组合Model Context Protocol (MCP)服务器的Rust工具包,提供CLI工具和库箱。

  • by hydai
  • Rust
  • 本地部署
  • 更新于
在 GitHub 查看 hydai/mcplug

使用说明

mcplug

用于发现、调用和编写的Rust工具包 模型上下文协议(MCP) 服务器——作为CLI工具和库机箱。

不需要Node.js。没有npx。只是一个本地二进制文件。

特性

  • 发现 配置在Cursor、Claude Desktop、Claude Code、VS Code、Windsurf、Codex和OpenCode中的MCP服务器
  • 呼叫 任何具有灵活参数格式的命令行MCP工具
  • OAuth 基于浏览器的受保护MCP服务器身份验证
  • 守护进程 持久后台服务器连接模式
  • 代码生成 --从MCP服务器模式发出Rust类型或独立CLI二进制文件
  • 图书馆板条箱 --在您自己的Rust应用程序中嵌入MCP工具调用

安装

cargo install --path .

或者从源代码构建:

cargo build --release

快速开始

列出已配置的服务器

mcplug list

列出特定服务器上的工具

mcplug list firecrawl

调用工具

mcplug call firecrawl.crawl url:https://example.com

速记(推断 call):

mcplug firecrawl.crawl url:https://example.com

函数调用语法:

mcplug call 'firecrawl.crawl(url: "https://example.com")'

临时连接(无需配置)

# HTTP/SSE endpoint
mcplug list --http-url https://mcp.example.com/mcp

# stdio server
mcplug list --stdio "npx -y some-mcp-server"

配置

mcplug从以下位置读取配置(最高优先级优先):

  1. --config <path> CLI标志
  2. MCPLUG_CONFIG 环境变量
  3. ./config/mcplug.json (项目级)
  4. ~/.mcplug/mcplug.json (家庭层面)

它还读取mcporter配置文件作为迁移的后备方案。

配置格式

{
  "mcpServers": {
    "firecrawl": {
      "baseUrl": "https://mcp.firecrawl.dev/mcp",
      "headers": { "Authorization": "$env:FIRECRAWL_API_KEY" }
    },
    "local-tool": {
      "command": "my-mcp-server",
      "args": ["--port", "3000"]
    }
  },
  "imports": ["cursor", "claude-code", "claude-desktop"]
}

编辑器导入

mcplug会自动发现编辑器中配置的MCP服务器:

编辑器 配置路径
光标 ~/.cursor/mcp.json
克劳德桌面 ~/Library/Application Support/Claude/claude_desktop_config.json
克劳德代码 ~/.claude/.mcp.json
VS代码 ~/.vscode/mcp.json
风帆冲浪 ~/.windsurf/mcp.json
食品法典委员会 ~/.codex/mcp.json
OpenCode ~/.opencode/mcp.json

CLI命令

命令 描述
mcplug list [server] 列出服务器上的服务器或工具
mcplug call <server.tool> [args] 调用MCP工具
mcplug auth <server> 受保护服务器的OAuth登录
mcplug daemon start|stop|restart|status 管理持久后台服务器
mcplug generate-cli <server> 生成独立的CLI二进制文件
mcplug emit-rs <server> Emit Rust类型定义
mcplug config add|show 管理配置

使用 --json 任何用于机器可读输出的命令。

图书馆使用情况

添加到您的 Cargo.toml:

[dependencies]
mcplug = { path = "." }

一枪呼叫

use mcplug::call_once;

let result = call_once("firecrawl", "crawl", json!({"url": "https://example.com"})).await?;
println!("{}", result.text());

带连接池的运行时

use mcplug::Runtime;

let runtime = Runtime::from_config().await?;
let result = runtime.call_tool("context7", "resolve-library-id", json!({"libraryName": "react"})).await?;
runtime.close().await?;

键入服务器代理

use mcplug::{Runtime, ServerProxy};

let runtime = Runtime::from_config().await?;
let chrome = ServerProxy::new(&runtime, "chrome-devtools");
let snapshot = chrome.call("takeSnapshot", json!({})).await?;

测试

cargo test               # run all tests (unit + integration)
cargo test --lib         # unit tests only
cargo test --test cli_integration  # specific integration suite

304个测试,涵盖所有模块:参数解析、配置加载/合并、CLI命令、OAuth流、传输(stdio+HTTP)、运行时连接池、守护进程管理、代码生成和错误处理。

集成测试使用模拟MCP服务器二进制文件(tests/fixtures/mock_mcp_server.rs)通过stdio支持5个工具。CLI测试使用 assert_cmd 用于端到端二进制验证。

环境变量

变量 默认值 用途
MCPLUG_CONFIG -- 覆盖配置文件路径
MCPLUG_LIST_TIMEOUT 30000 列表超时(毫秒)
MCPLUG_CALL_TIMEOUT 30000 呼叫超时(毫秒)
MCPLUG_OAUTH_TIMEOUT_MS 60000 OAuth超时(毫秒)
MCPLUG_LOG_LEVEL warn 记录详细信息

Claude代码插件

mcplug附带了 克劳德代码 在处理项目时提供上下文帮助的插件。

claude --plugin-dir /path/to/mcplug

这使得:

  • 技能 -关于CLI命令、配置和库API的上下文知识(通过相关问题自动激活)
  • 命令 — /mcplug:quickstart 对于首次运行设置, /mcplug:troubleshoot 用于诊断问题
  • 代理 — mcplug-guide 通过咨询技能和源代码来回答诸如“我如何使用mcplug”之类的问题

致谢

mcplug的灵感来自 麦克波特,一个基于Node.js的MCP工具运行器。mcplug旨在为Rust生态系统带来与不依赖Node.js的单个原生二进制文件相同的功能。

许可证

麻省理工学院