Token导航 LogoToken导航TokenDH.com
hypermcp (Rayprogramming) logo
运维云端未说明官方级别未说明来源级核验

hypermcp (Rayprogramming)

MCP Server

hypermcp是一个可重用的包,提供构建模型上下文协议(MCP)服务器的通用基础设施,包括服务器设置、HTTP客户端、缓存层和结构化日志等功能,适用于需要快速构建MCP服务器的开发者。

工具数

0

提示词数

0

GitHub Stars

1

资源数

0
Go云端部署Docker

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

rayprogramming

提供方

rayprogramming

最后核验

2026/5/17 20:19

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

详细介绍

hypermcp - 可重用的MCP服务器基础设施

hypermcp 这是一个可重用的包,为构建模型上下文协议(MCP)服务器提供了通用基础设施。它处理了所有模板代码,使您能够专注于实现自定义工具和资源。

特点/特性

  • ✅ MCP服务器设置及生命周期管理
  • ✅ 带日志记录功能的HTTP客户端
  • ✅ 缓存层(可选择禁用)
  • ✅ 传输抽象(stdio,未来:可流式HTTP)
  • ✅ 使用 zap 进行结构化日志记录
  • ✅ 用于注册工具和资源的辅助方法
  • ✅ 自动统计追踪

快速入门

1. 创建一个新的MCP服务器

package main

import (
    "context"
    "github.com/rayprogramming/hypermcp"
    "github.com/rayprogramming/hypermcp/cache"
    "go.uber.org/zap"
)

func main() {
    // Setup logger
    logger, _ := zap.NewProduction()
    defer logger.Sync()

    // Configure server
    cfg := hypermcp.Config{
        Name:         "my-mcp-server",
        Version:      "1.0.0",
        CacheEnabled: true,
        CacheConfig: cache.Config{
            MaxCost:     100 * 1024 * 1024, // 100MB
            NumCounters: 10_000,
            BufferItems: 64,
        },
    }

    // Create base server
    srv, err := hypermcp.New(cfg, logger)
    if err != nil {
        logger.Fatal("failed to create server", zap.Error(err))
    }

    // Register your tools and resources
    registerFeatures(srv)

    // Log registration stats
    srv.LogRegistrationStats()

    // Run with stdio transport
    ctx := context.Background()
    if err := hypermcp.RunWithTransport(ctx, srv, hypermcp.TransportStdio, logger); err != nil {
        logger.Fatal("server failed", zap.Error(err))
    }
}

2. 实现您的服务提供者

创建使用共享基础设施的提供者:

package providers

import (
    "context"
    "github.com/modelcontextprotocol/go-sdk/mcp"
    "github.com/rayprogramming/hypermcp"
    "github.com/rayprogramming/hypermcp/cache"
    "github.com/rayprogramming/hypermcp/httpx"
    "go.uber.org/zap"
)

type MyProvider struct {
    httpClient *httpx.Client
    cache      *cache.Cache
    logger     *zap.Logger
}

func NewMyProvider(srv *hypermcp.Server) *MyProvider {
    return &MyProvider{
        httpClient: srv.HTTPClient(),
        cache:      srv.Cache(),
        logger:     srv.Logger(),
    }
}

func (p *MyProvider) MyTool(
    ctx context.Context,
    req *mcp.CallToolRequest,
    input MyToolInput,
) (*mcp.CallToolResult, MyToolOutput, error) {
    // Your implementation here
    // Use p.httpClient, p.cache, p.logger as needed
}

3. 注册您的功能

func registerFeatures(srv *hypermcp.Server) {
    // Create providers
    myProvider := providers.NewMyProvider(srv)

    // Register tools using the helper function
    hypermcp.AddTool(
        srv,
        &mcp.Tool{
            Name:        "my_tool",
            Description: "Does something cool",
        },
        myProvider.MyTool,
    )

    // Register resources using the helper method
    srv.AddResource(
        &mcp.Resource{
            URI:         "myresource://data",
            Name:        "My Resource",
            Description: "Provides some data",
            MIMEType:    "application/json",
        },
        func(ctx context.Context, req *mcp.ReadResourceRequest) (*mcp.ReadResourceResult, error) {
            // Your resource implementation
        },
    )
}

API 参考

服务器创建

func New(cfg Config, logger *zap.Logger) (*Server, error)

创建一个带有通用基础设施的新MCP服务器。

配置

type Config struct {
    Name         string        // Server name
    Version      string        // Server version
    CacheEnabled bool          // Enable caching
    CacheConfig  cache.Config  // Cache configuration
}

服务器方法

  • HTTPClient() *httpx.Client - 获取共享的HTTP客户端
  • Cache() *cache.Cache - 获取缓存实例
  • Logger() *zap.Logger - 获取日志记录器
  • Metrics() *Metrics - 获取用于跟踪的指标实例
  • GetMetrics() MetricsSnapshot - 获取当前指标的快照
  • MCP() *mcp.Server - 获取底层的MCP服务器
  • AddResource(resource, handler) - 注册一个资源(自动递增计数器)
  • AddResourceTemplate(template, handler) - 注册资源模板(自动递增计数器)
  • LogRegistrationStats() - 日志工具/资源计数
  • Run(ctx, transport) - 启动服务器
  • Shutdown(ctx) - 平滑关闭(关闭缓存,记录最终统计信息)

包级别函数

  • AddTool[In, Out](srv, tool, handler) - 注册一个工具(自动递增计数器)
  • New(cfg, logger) - 创建一个新的服务器实例
  • RunWithTransport(ctx, srv, transportType, logger) - 使用指定的传输方式启动服务器

交通

func RunWithTransport(ctx context.Context, srv *Server, transportType TransportType, logger *zap.Logger) error

使用指定的传输方式启动服务器。

可用的交通工具:

  • TransportStdio - 标准输入/输出(推荐用于大多数使用场景)
  • TransportStreamableHTTP - 可流式传输的HTTP(用于处理多个客户端连接的服务器,尚未实现)

运输类型

hypermcp 支持MCP规范推荐的传输方式:

标准I/O传输(推荐)

  • 默认选择 对于大多数MCP服务器
  • 客户端将服务器作为子进程启动
  • 通过标准输入/输出进行通信
  • 更简单的设置和部署
  • 客户端应尽可能支持标准输入输出(根据MCP规范)

可流式传输的HTTP传输

  • 对于处理多个并发客户端的服务器
  • 基于HTTP,可选支持服务器发送事件(Server-Sent Events)
  • 替换已弃用的HTTP+SSE传输方式
  • 更复杂,但支持高级场景
  • 在此包中尚未实现

益处

为你

  • 🚀 表情符号“🚀”在中文中通常被翻译为“火箭”或直接用该表情符号表示,因为它形象地代表了火箭升空的场景。在没有具体上下文的情况下,我们通常直接使用该表情符号或者简单地称之为“火箭”表情。所以,🚀 可以翻译为“火箭”或直接保留为“🚀”。 快速设置几分钟内启动服务器,而非数小时
  • 🔧(扳手或修理工具的符号,常用于表示修理、维护或技术相关的意思) 关注特性把时间花在工具上,而不是模板代码上
  • 📦 箱子/包裹 电池已包含HTTP客户端、缓存、日志均已配置完毕
  • 🎯(目标/靶心) 最佳实践遵循MCP模式和Go惯用法

为了您的用户

  • ⚡(闪电符号,常用于表示速度、活力、电或快速充电等含义) 演出内置缓存和连接池
  • 📊 表格/数据图表 可观测性使用zap进行结构化日志记录
  • 🛡️ 翻译为中文是“盾牌”。这个符号通常用来表示防御、保护或安全的概念。 可靠性适当的错误处理和优雅的关闭

示例

这个(或“它”) examples/ 目录中包含完整且可运行的示例:

你好 - 基本服务器

最小示例展示:

  • 服务器配置与设置
  • 简单的工具注册
  • 优雅的关闭处理

天气 - 缓存演示

展示:

  • 启用并使用缓存
  • 缓存命中/未命中模式
  • 一个服务器上集成多种工具
  • 关闭时记录指标

指标(或度量标准) - 指标与监控

展示如何:

  • 追踪工具调用
  • 监控缓存性能
  • 通过工具暴露指标
  • 对数周期性统计
  • 访问特定缓存的指标

文件服务器 - 资源提供者

示例:

  • 资源注册
  • 带参数的资源模板
  • 处理文件和数据

运行任意示例:

cd examples/hello && go run main.go
cd examples/weather && go run main.go
cd examples/metrics && go run main.go

性能指标

hypermcp 包含内置的性能追踪功能:

// Track operations
srv.Metrics().IncrementToolInvocations()
srv.Metrics().IncrementCacheHits()
srv.Metrics().IncrementCacheMisses()
srv.Metrics().IncrementErrors()

// Get snapshot
metrics := srv.GetMetrics()
fmt.Printf("Uptime: %v\n", metrics.Uptime)
fmt.Printf("Cache hit rate: %.2f%%\n", metrics.CacheHitRate*100)

跟踪的指标:

  • 服务器运行时间
  • 工具调用
  • 资源读取
  • 缓存命中/未命中和命中率
  • 错误计数

最佳实践

优雅地关闭

始终执行优雅关闭以确保资源得到妥善清理:

// Setup signal handling
ctx, cancel := context.WithCancel(context.Background())
defer cancel()

sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM)

go func() {
    <-sigChan
    logger.Info("shutting down...")
    cancel()
}()

// Run server
if err := hypermcp.RunWithTransport(ctx, srv, hypermcp.TransportStdio, logger); err != nil {
    logger.Error("server error", zap.Error(err))
    os.Exit(1)
}

// Graceful shutdown with timeout
shutdownCtx, shutdownCancel := context.WithTimeout(context.Background(), 5*time.Second)
defer shutdownCancel()

if err := srv.Shutdown(shutdownCtx); err != nil {
    logger.Error("shutdown error", zap.Error(err))
}

缓存使用情况

对昂贵的操作使用缓存:

cacheKey := fmt.Sprintf("data:%s", id)

// Check cache first
if cached, ok := srv.Cache().Get(cacheKey); ok {
    srv.Metrics().IncrementCacheHits()
    return cached
}
srv.Metrics().IncrementCacheMisses()

// Fetch data...
result := fetchExpensiveData(id)

// Cache for 5 minutes
srv.Cache().Set(cacheKey, result, 5*time.Minute)

HTTP客户端使用

提供的HTTP客户端包含重试机制和适当的超时设置:

type Response struct {
    Status string `json:"status"`
}

var resp Response
if err := srv.HTTPClient().Get(ctx, apiURL, &resp); err != nil {
    srv.Metrics().IncrementErrors()
    return err
}

示例

依赖项

  • github.com/modelcontextprotocol/go-sdk - MCP SDK(MCP软件开发工具包)
  • go.uber.org/zap - 结构化日志记录
  • github.com/dgraph-io/ristretto - 缓存(通过 pkg/cache)

目录标签

目录标签

Go云端部署DockerMCP服务器本地部署基础设施HTTP客户端缓存结构化日志

接入字段

传输方式(transport,传输协议)

未说明

鉴权方式(authType,认证方式)

none

工具数量(toolCount,工具数)

0

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

未说明none部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

仍需确认:installCommand

来源信息

继续浏览同类 MCP