Home
Login

用于连接Model Context Protocol (MCP)服务器的轻量级React钩子库

MITTypeScript 0.6kmodelcontextprotocoluse-mcp Last Updated: 2025-06-24

use-mcp 项目详细介绍

项目概述

use-mcp 是一个轻量级的 React 钩子库,专门用于连接 Model Context Protocol (MCP) 服务器。该项目简化了 AI 系统中 MCP 标准的认证和工具调用过程,为开发者提供了一个易于使用的前端集成解决方案。

项目特性

🔄 自动连接管理

  • 支持自动重连和重试机制
  • 智能处理连接状态和异常情况

🔐 OAuth 认证流程

  • 完整的 OAuth 认证流程处理
  • 支持弹窗和回退认证方式
  • 自动处理认证令牌存储

📦 简洁的 React Hook 接口

  • 提供直观的 React Hook API
  • 状态管理自动化
  • 易于集成到现有 React 应用

🧰 TypeScript 支持

  • 完整的 TypeScript 类型定义
  • 编辑器智能提示和类型检查
  • 提高开发效率和代码质量

📝 全面的日志记录

  • 详细的调试日志功能
  • 便于问题排查和开发调试

🌐 多传输协议支持

  • 支持 HTTP 传输
  • 支持 SSE (Server-Sent Events) 传输

安装方式

npm install use-mcp
# 或者
pnpm add use-mcp
# 或者
yarn add use-mcp

基本使用方法

主要 Hook 使用

import { useMcp } from 'use-mcp/react'

function MyAIComponent() {
  const {
    state,        // 连接状态: 'discovering' | 'authenticating' | 'connecting' | 'loading' | 'ready' | 'failed'
    tools,        // MCP 服务器提供的可用工具
    error,        // 连接失败时的错误信息
    callTool,     // 调用 MCP 服务器工具的函数
    retry,        // 手动重试连接
    authenticate, // 手动触发认证
    clearStorage, // 清除存储的令牌和凭据
  } = useMcp({
    url: 'https://your-mcp-server.com',
    clientName: 'My App',
    autoReconnect: true,
  })

  // 处理不同的连接状态
  if (state === 'failed') {
    return (
      <div>
        <p>连接失败: {error}</p>
        <button onClick={retry}>重试</button>
        <button onClick={authenticate}>手动认证</button>
      </div>
    )
  }

  if (state !== 'ready') {
    return <div>正在连接到 AI 服务...</div>
  }

  // 使用可用的工具
  const handleSearch = async () => {
    try {
      const result = await callTool('search', { query: 'example search' })
      console.log('搜索结果:', result)
    } catch (err) {
      console.error('工具调用失败:', err)
    }
  }

  return (
    <div>
      <h2>可用工具数量: {tools.length}</h2>
      <ul>
        {tools.map(tool => (
          <li key={tool.name}>{tool.name}</li>
        ))}
      </ul>
      <button onClick={handleSearch}>搜索</button>
    </div>
  )
}

OAuth 认证回调设置

为了处理 OAuth 认证流程,需要在应用中设置回调端点。

React Router 配置

// App.tsx with React Router
import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'
import { useEffect } from 'react'
import { onMcpAuthorization } from 'use-mcp'

function OAuthCallback() {
  useEffect(() => {
    onMcpAuthorization()
  }, [])

  return (
    <div>
      <h1>正在认证...</h1>
      <p>此窗口应该会自动关闭。</p>
    </div>
  )
}

function App() {
  return (
    <Router>
      <Routes>
        <Route path="/oauth/callback" element={<OAuthCallback />} />
        <Route path="/" element={<YourMainComponent />} />
      </Routes>
    </Router>
  )
}

Next.js 配置

// pages/oauth/callback.tsx
import { useEffect } from 'react'
import { onMcpAuthorization } from 'use-mcp'

export default function OAuthCallbackPage() {
  useEffect(() => {
    onMcpAuthorization()
  }, [])

  return (
    <div>
      <h1>正在认证...</h1>
      <p>此窗口应该会自动关闭。</p>
    </div>
  )
}

API 参考

useMcp Hook

function useMcp(options: UseMcpOptions): UseMcpResult

配置选项 (UseMcpOptions)

选项 类型 描述
url string 必需。MCP 服务器的 URL
clientName string OAuth 注册时的客户端名称
clientUri string OAuth 注册时的客户端 URI
callbackUrl string OAuth 重定向的自定义回调 URL(默认为当前域名的 /oauth/callback
storageKeyPrefix string localStorage 中 OAuth 数据的存储键前缀(默认为 "mcp:auth"
clientConfig object MCP 客户端身份的自定义配置
debug boolean 是否启用详细的调试日志
autoRetry boolean | number 初始连接失败时的自动重试,可设置延迟毫秒数
autoReconnect boolean | number 已建立连接丢失时的自动重连,可设置延迟毫秒数(默认:3000)

返回值 (UseMcpResult)

属性 类型 描述
state string 当前连接状态:'discovering', 'authenticating', 'connecting', 'loading', 'ready', 'failed'
tools Tool[] MCP 服务器提供的可用工具
error string | undefined 连接失败时的错误信息
authUrl string | undefined 弹窗被阻止时的手动认证 URL
log LogEntry[] 日志消息数组
callTool (name: string, args?: Record<string, unknown>) => Promise<any> 调用 MCP 服务器工具的函数
retry () => void 手动尝试重新连接
disconnect () => void 断开与 MCP 服务器的连接
authenticate () => void 手动触发认证
clearStorage () => void 清除所有存储的认证数据

实际应用示例

在线演示

总结

use-mcp 为 React 开发者提供了一个强大而简洁的解决方案,用于集成 Model Context Protocol 服务器。通过其直观的 Hook 接口、完善的认证流程处理和强大的连接管理功能,开发者可以轻松地在 React 应用中实现 AI 工具集成,大大降低了 MCP 标准的使用门槛。

Star History Chart