MCP客户端库

一个实现Model Context Protocol (MCP)的4D客户端库,用于通过标准化的JSON-RPC接口与AI模型和后端服务通信。

  • by mesopelagique
  • 4D
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 mesopelagique/MCP

使用说明

主控程序

4D实现 模型上下文协议(MCP) 客户端库。

MCP是一种标准化协议,使应用程序能够通过基于JSON-RPC的结构化接口与AI模型和专用后端服务进行通信。

特性

  • 连接到MCP服务器(本地和远程)
  • 从MCP兼容服务调用工具和访问资源
  • 在Claude Desktop和VSCode中配置的自动发现服务器
  • 多种传输机制:StdIO和HTTP/SSE
  • 同步(和异步)操作模式

依赖项

该组件需要:

  • StdIO -用于基于stdio的进程通信
  • JSONRPC -JSON-RPC协议的实现

用法

基础示例

// Create a transport for a local MCP server
var $transport:=cs.MCP.TransportStdIO.new("/opt/homebrew/bin/npx"; "-y"; "@modelcontextprotocol/server-github")

// Create client
var $client:=cs.MCP.Client.new($transport)

// Initialize connection
var $init : cs.MCP.InitializeResult:=$client.initialize()

If ($init.success)
    // List available tools
    var $tools : cs.MCP.ListToolsResult:=$client.listTools()

    // Call a tool
    var $result : cs.MCP.ToolCallResult:=$client.callTool("search_repositories"; {query: "4d language"})

    // Get text result
    var $text : Text:=$result.text()
End if

// Cleanup
$transport.close()

使用服务器注册表

注册表会自动从Claude Desktop和VSCode配置中发现MCP服务器:

// Load all discovered servers
cs.MCP.ServerRegistry.me.reload()

// List available servers
var $servers : Collection:=cs.MCP.ServerRegistry.me.listServers()

// Get a client for a specific server
var $client : cs.MCP.Client:=cs.MCP.ServerRegistry.me.getClient("github")

// Use the client...
var $tools : cs.MCP.ListToolsResult:=$client.listTools()

// Close when done
cs.MCP.ServerRegistry.me.closeClient("github")

手动服务器配置

// Create a stdio server config
var $config:=cs.MCP.ServerConfig.new("my-server"; "stdio")
$config.command:="/usr/local/bin/my-mcp-server"
$config.args:=["--option"; "value"]
$config.env:={API_KEY: "secret"}

// Create client from config
var $client:=$config.createClient()

HTTP传输

// Create HTTP transport for remote server
var $transport:=cs.MCP.TransportHttp.new("https://mcp.example.com/xxx")

// Create client
var $client:=cs.MCP.Client.new($transport)

// Initialize and use...
$client.initialize()

异步模式

进行中

// Define callback
var $callback:=Formula(handleResult($1))

// Call asynchronously
$client.listTools($callback)

api参考

客户

与MCP服务器交互的主要类。

方法 说明
initialize() 协商协议版本和功能
listTools() 获取可用工具
callTool(name; arguments) 执行工具
listResources() 获取可用资源
readResource(uri) 阅读资源
listPrompts() 获取可用提示
getPrompt(name; arguments) 获得提示
ping() 检查服务器连接
close() 关闭连接

运输

类别 描述
TransportStdIO 通过stdin/stdout进行本地进程通信
TransportHttp 通过HTTP/SSE进行远程服务器通信

配置

类别 描述
ConfigLoader 从Claude/VSCode加载服务器配置
ServerConfig 表示服务器配置
ServerRegistry 已发现服务器的注册表

配置文件

库从以下位置发现MCP服务器:

  • 克劳德桌面版: ~/Library/Application Support/Claude/claude_desktop_config.json
  • VSCode用户: ~/Library/Application Support/Code/User/settings.json
  • VSCode工作区: .vscode/settings.json
  • VSCode MCP: .vscode/mcp.json

示例 .vscode/mcp.json:

{
  "servers": {
    "github": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "your-token"
      }
    }
  }
}

许可证

麻省理工学院