mcpField
M
MCP4Go

MCP4Go

本地服务
github.com/mcp4go开发工具574 周前更新

关于 MCP4Go

MCP4Go 是用纯 Go 实现 MCP 的 SDK,面向构建 AI 应用的 Go 开发者。它封装协议细节,并提供资源、提示词和工具等高层能力。

主要功能

  1. 01纯 Go 实现 MCP 协议
  2. 02资源生命周期管理
  3. 03定义并调用工具
  4. 04提示词与采样参数支持
  5. 05可插拔扩展架构
  6. 06日志、诊断与错误处理

适用场景

  1. 01在 Go 应用中构建 MCP 能力
  2. 02管理 MCP 资源生命周期
  3. 03向 MCP 客户端提供工具调用
  4. 04扩展自定义 MCP 功能

MCP 相关

该 SDK 实现 MCP 协议,支持 JSON-RPC 通信,并提供资源、提示词和工具等 MCP 能力,供应用构建 MCP 服务端。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Go 测试 代码检查 codeql GoDoc CodeCover Go 报告卡 许可证 发布版本

MCP4Go

MCP4Go 是 Model Context Protocol (MCP) 的 Go 实现,旨在通过抽象协议的复杂性,简化 AI 应用的开发。

功能特性

  • 使用纯 Go 完整实现 MCP 协议
  • 为常见 MCP 资源提供高级抽象
  • 支持自定义扩展的可插拔架构
  • 完备的文档和示例
  • 已可用于生产环境,并提供可靠的错误处理

安装

MCP4Go 需要 Go 1.18 或更高版本。使用 Go 模块安装:

go get github.com/mcp4go/mcp4go

快速入门

要开始使用 MCP4Go,请在 Go 应用中导入此软件包:

package main

import (
	"context"
	"fmt"
	"log"
	"os"
	"os/signal"
	"syscall"
	"time"

	"github.com/mcp4go/mcp4go/pkg/logger"
	"github.com/mcp4go/mcp4go/protocol"
	"github.com/mcp4go/mcp4go/server"
	"github.com/mcp4go/mcp4go/server/iface"
	"github.com/mcp4go/mcp4go/server/transport"

	_ "time/tzdata" // Load all time zones
)

func main() {
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()
	_logger := logger.DefaultLog

	// Listen for interrupt signals for graceful exit
	signalCh := make(chan os.Signal, 1)
	signal.Notify(signalCh, os.Interrupt, syscall.SIGTERM)
	go func() {
		<-signalCh
		_logger.Logf(ctx, logger.LevelWarn, "Received shutdown signal")
		cancel()
	}()

	type timeRequest struct {
		TimeZone string `json:"time_zone,omitempty" description:"time zone default is Asia/Shanghai"`
	}

	// Create standard input/output transport layer
	stdioTransport := transport.NewStdioTransport()
	// Create MCP server and configure options
	srv, cleanup, err := server.NewServer(
		stdioTransport,
		server.WithServerInfo(protocol.Implementation{
			Name:    "time-mcp",
			Version: "0.1.0",
		}),
		server.WithInstructions("Welcome to Time MCP! This server provides Time tools."),
		server.WithToolBuilder(iface.NewFunctionalToolsBuilder(
			iface.NewFunctionalToolWrapper(
				"time",
				"get current time",
				func(ctx context.Context, args timeRequest) ([]protocol.Content, error) {
					if args.TimeZone == "" {
						args.TimeZone = "Asia/Shanghai"
					}

					getTimezoneTime := func(_ context.Context, timeZone string) time.Time {
						if timeZone == "" {
							timeZone = "Asia/Shanghai"
						}
						loc, err := time.LoadLocation(timeZone)
						if err != nil {
							return time.Now()
						}
						return time.Now().In(loc)
					}

					currentTime := getTimezoneTime(ctx, args.TimeZone)

					return []protocol.Content{
						protocol.NewTextContent(fmt.Sprintf("current time is %s", currentTime), nil),
					}, nil
				}),
		)),
	)
	if err != nil {
		log.Printf("Failed to create server: %v\n", err)
		return
	}
	defer cleanup()

	// Start the server
	_logger.Logf(ctx, logger.LevelWarn, "Starting Time MCP server")
	if err := srv.Run(ctx); err != nil {
		_logger.Logf(ctx, logger.LevelError, "Server error: %v", err)
		return
	}

	_logger.Logf(ctx, logger.LevelWarn, "Server shutdown complete")
}

协议实现

MCP4Go 完整实现了 Model Context Protocol,支持:

  • JSON-RPC 通信
  • 资源生命周期管理
  • 提示词工程
  • 工具定义和调用
  • 采样参数
  • 日志记录和诊断

许可证

本项目采用 MIT 许可证。

贡献

欢迎贡献!有关更多信息,请参阅我们的贡献指南。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。