mcpField
M
MCP-Go

MCP-Go

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

关于 MCP-Go

MCP-Go 是用 Go 实现 MCP 的库,为构建 MCP 客户端和服务端的开发者提供类型安全、模块化的接口。它支持多种传输方式,并采用 Go 的并发机制管理会话。

主要功能

  1. 01实现 MCP 客户端与服务端
  2. 02支持 stdio、WebSockets 和 HTTP
  3. 03基于 goroutine 和 channel 的并发设计
  4. 04类型安全 API
  5. 05模块化处理器设计
  6. 06会话生命周期管理

适用场景

  1. 01用 Go 构建 MCP 服务端
  2. 02用 Go 构建 MCP 客户端
  3. 03在不同传输方式间建立 MCP 会话

MCP 相关

该库实现 MCP 协议 v2025-03-26,包含客户端和服务端组件,可通过 stdio、WebSockets、HTTP 或自定义传输建立会话。

配置

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

暂未收录安装方式

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

代码仓库

工具

还没有获取到工具列表

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

详细介绍

MCP-Go

什么是 MCP?

MCP(Model Context Protocol)是一种轻量、灵活的协议,旨在实现 AI 模型与应用程序之间的高效通信。它提供了一种标准化方式,让服务能够交换消息、工具和资源,同时保持高性能与可靠性。

关于此软件包

MCP-Go 是 Model Context Protocol 的 Go 实现,提供了用于 AI 通信的稳健框架:

  • 客户端-服务端架构:完整实现客户端和服务端组件
  • 灵活的传输方式:可通过标准输入/输出、WebSockets 或 HTTP 无缝通信
  • 并发设计:从底层开始便基于 Go 的 goroutine 和 channel 构建
  • 类型安全的 API:整个代码库都采用强类型,以避免运行时错误
  • 模块化组件:采用基于处理器的设计模式,便于扩展和维护
  • 会话管理:持久连接,并妥善处理生命周期

用法

常见模式

所有 MCP-Go 实现都遵循类似的模式:

package main

import (
    "github.com/OkutaniDaichi0106/mcp-go/mcp"
)

func main() {
    server := mcp.NewServer()

    // Tool registration
    mcp.HandleToolFunc(&mcp.ToolDefinition{
        Name:        "tool_name",
        Description: "Tool description",
        InputSchema: mcp.InputSchema(`{ "type": "object", ... }`),
    }, func(w mcp.ContentsWriter, name string, args map[string]any) {
        // Tool implementation
        // ...
        w.WriteContents(contents)
    })

    // Resource registration
    mcp.HandleResourceFunc(&mcp.ResourceDefinition{
        URI:         "resource_uri",
        MimeType:    "resource_mime_type",
        Name:        "resource_name",
        Description: "Resource description",
    }, func(w mcp.ContentsWriter, uri string) {
        // Resource implementation
        // ...
        w.WriteContents(contents)
    })

    // Prompt registration
    mcp.HandlePromptFunc(&mcp.PromptDefinition{
        Name:        "prompt_name",
        Description: "Prompt description",
        InputSchema: mcp.InputSchema(`{ "type": "object", ... }`),
    }, func(w mcp.PromptWriter, name string, args map[string]any) {
        // Prompt implementation
        // ...
        w.WriteContents(contents)
    })

    transport, err := ... // Create transport

    // Configure transport and accept -> get session
    session, err := server.Accept(transport)
    defer session.Close()

    // ...
}
package main

import (
    "github.com/OkutaniDaichi0106/mcp-go/mcp"
)

func main() {
    // Sample registration
    mcp.HandleSampleFunc(&mcp.SampleDefinition{
        Name:        "sample_name",
        Description: "Sample description",
    }, func(w mcp.ContentsWriter, name string, args map[string]any) {
        // Sample implementation
        // ...
        w.WriteContents(contents)
    })

    // Root registration
    mcp.HandleRoot(&mcp.RootDefinition{
        URI:  "root_uri",
        Name: "Root name",
    })

    // Create client
    client := mcp.NewClient()

    transport, err := ... // Create transport

    // Configure transport and dial -> get session
    session, err := client.Dial(transport)
    defer session.Close()

    // ...
}
传输选项

MCP-Go 支持多种传输方式,只需进行最少的代码更改:

自定义传输

对于自定义传输,请将 Accept 和 Dial 方法与相应的传输对象配合使用。

// Server
sess, err := server.Accept(t)
// Client
sess, err := client.Dial(t)

标准输入/输出

对于标准输入/输出,请使用 AcceptStdio 和 DialStdio 方法。

// Server
sess, err := server.AcceptStdio()
// Client
sess, err := client.DialStdio("command", "arg1", "arg2")

HTTP

使用 HTTP 时,可以使用 AcceptHTTP 和 DialHTTP 方法。

// Server
http.HandleFunc("/mcp", func(w http.ResponseWriter, r *http.Request) {
    sess, err := server.AcceptHTTP(w, r)
})
// Client
sess, err := client.DialHTTP("http://localhost:8080/mcp", nil)

规范合规性

MCP-Go 实现了 Model Context Protocol 规范 v2025-03-26,这是截至此版本发布时最新的协议版本。

安装

go get github.com/OkutaniDaichi0106/mcp-go

文档

如需详细的 API 文档和高级用法示例,请参阅我们的 GoDoc。

许可证

本项目采用 MIT 许可证授权,详情请参阅 LICENSE 文件。

评论

支持 Markdown

第一次接触 MCP?

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

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