RI

riza-io/mcp-go

Developer tools

Эта страница переведена автоматически. Технические детали смотрите в оригинале. Открыть оригинал

36 stars 4 forks Качество 56 Тренд 12MIT

Создание серверов Model Context Protocol (MCP)

Обзор

Внедрение протокола Model Context Protocol (MCP), обеспечивающего как клиентские, так и серверные возможности для интеграции с поверхностями LLM. Протокол Model Context позволяет приложениям предоставлять контекст для LLM стандартизированным способом, отделяя проблемы предоставления контекста от фактического взаимодействия LLM. В этом Go SDK реализована полная спецификация MCP, что позволяет легко: Создайте MCP-клиенты, которые могут подключаться к любому MCP-серверу - Создайте MCP-серверы, которые предоставляют ресурсы, подсказки и инструменты - Используйте стандартные транспортные средства, такие как stdio и SSE (скоро) - Обрабатывайте все сообщения протокола MCP и события жизненного цикла Интересно, как все это выглядит на практике? Вот пример сервера, который раскрывает содержимое io. ФС как ресурсы. Вы можете собрать этот пример и подключить его к Claude Desktop (или любому другому клиенту MCP). Типовая документация по контекстному протоколу - Спецификация MCP - Примерные серверы Реализуется большая часть базового протокола.

Обзор (машинный перевод)

MCP Go SDK

Внедрение протокола Model Context Protocol (MCP), обеспечивающего как клиентские, так и серверные возможности для интеграции с поверхностями LLM.

Обзор

Протокол Model Context позволяет приложениям предоставлять контекст для LLM стандартизированным способом, отделяя проблемы предоставления контекста от фактического взаимодействия LLM. В этом Go SDK реализована полная спецификация MCP, что позволяет легко:

Создание MCP-клиентов, которые могут подключаться к любому MCP-серверу. Создание MCP-серверов, раскрывающих ресурсы, подсказки и инструменты Используйте стандартные транспортные средства, такие как stdio и SSE (скоро) Обработка всех сообщений протокола MCP и событий жизненного цикла

Небольшой пример

Интересно, как все это выглядит на практике? Вот пример сервера, который При этом он выделяется как ресурс.

Вы можете собрать этот пример и подключить его к Claude Desktop (или любому другому клиенту MCP).

Документация

  • Документация по типовому контекстному протоколу Спецификация MCP Примеры серверов

#Дорожная карта

Реализуется большая часть базового протокола. В нашей дорожной карте есть следующие особенности:

  • Уведомления
  • Отбор проб
  • Корни

##Правовые

Предлагается по лицензии MIT.

Эта страница переведена автоматически. Технические детали смотрите в оригинале.

README

Показан фрагмент оригинального README. Открыть оригинал.

MCP Go SDK

A Go implementation of the Model Context Protocol (MCP), providing both client and server capabilities for integrating with LLM surfaces.

Overview

The Model Context Protocol allows applications to provide context for LLMs in a standardized way, separating the concerns of providing context from the actual LLM interaction. This Go SDK implements the full MCP specification, making it easy to:

  • Build MCP clients that can connect to any MCP server
  • Create MCP servers that expose resources, prompts and tools
  • Use standard transports like stdio and SSE (coming soon)
  • Handle all MCP protocol messages and lifecycle events

A small example

Curious what all this looks like in practice? Here’s an example server that exposes the contents of an io.FS as resources.

package main

import (
	"context"
	"flag"
	"io/fs"
	"log"
	"mime"
	"os"
	"path/filepath"
	"strings"

	"github.com/riza-io/mcp-go"
)

type FSServer struct {
	fs fs.FS

	mcp.UnimplementedServer
}

func (s *FSServer) Initialize(ctx context.Context, req *mcp.Request[mcp.InitializeRequest]) (*mcp.Response[mcp.InitializeResponse], error) {
	return mcp.NewResponse(&mcp.InitializeResponse{
		ProtocolVersion: req.Params.ProtocolVersion,
		Capabilities: mcp.ServerCapabilities{
			Resources: &mcp.Resources{},
		},
	}), nil
}

func (s *FSServer) ListResources(ctx context.Context, req *mcp.Request[mcp.ListResourcesRequest]) (*mcp.Response[mcp.ListResourcesResponse], error) {
	var resources []mcp.Resource
	fs.WalkDir(s.fs, ".", func(path string, d fs.DirEntry, err error) error {
		if err != nil {
			return err
		}
		if d.IsDir() {
			return nil
		}
		resources = append(resources, mcp.Resource{
			URI:      "file://" + path,
			Name:     path,
			MimeType: mime.TypeByExtension(filepath.Ext(path)),
		})
		return nil
	})
	return mcp.NewResponse(&mcp.ListResourcesResponse{
		Resources: resources,
	}), nil
}

func (s *FSServer) ReadResource(ctx context.Context, req *mcp.Request[mcp.ReadResourceRequest]) (*mcp.Response[mcp.ReadResourceResponse], error) {
	contents, err := fs.ReadFile(s.fs, strings.TrimPrefix(req.Params.URI, "file://"))
	if err != nil {
		return nil, err
	}
	return mcp.NewResponse(&mcp.ReadResourceResponse{
		Contents: []mcp.ResourceContent{
			{
				URI:      req.Params.URI,
				MimeType: mime.TypeByExtension(filepath.Ext(req.Params.URI)),
				Text:     string(contents), // TODO: base64 encode
			},
		},
	}), nil
}

func main() {
	flag.Parse()

	root := flag.Arg(0)
	if root == "" {
		root = "/"
	}
Открыть полный README на GitHub

Установка

This server does not publish a one-line install command.

Open the repository installation guide Новичок в MCP? Начните с руководства на mcpskill.org →

Конфигурация

{ "mcpServers": { "fs": { "command": "/path/to/mcp-go-fs", "args": [ "/path/to/root/directory" ] } } }