Token导航 LogoToken导航TokenDH.com
05 Make Your MCP Server logo
开发工具未说明官方级别未说明来源级核验

05 Make Your MCP Server

MCP Server

一个基于Go语言和Docker的MCP服务器,提供网页抓取工具,用于增强LLM的功能。

工具数

1

提示词数

0

GitHub Stars

10

资源数

0
浏览器自动化ShellDocker本地部署

安装说明

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

作者 / 组织

ollama-tlms-golang

提供方

ollama-tlms-golang

最后核验

2026/5/17 20:19

快速接入

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

详细介绍

在Go中创建MCP服务器并使用Docker提供服务

引言

今天,我们将探讨如何在Go中创建MCP服务器,并使用Docker为其提供服务。

先决条件:已阅读 理解模型上下文协议(MCP)

要编写MCP服务器,有几个官方SDK:

近年来,我对Go产生了兴趣,所以我四处看看是否有Go实现。在此页面上 ,我发现了几个,特别是 的创造者 mcphost (我在讨论和使用 上一篇博客文章).

优势在于 mcp-go 该项目是因为它很简单,还提供了开发MCP客户端的工具,这对未来的博客文章非常有用。

创建MCP服务器

我不会在这里详细介绍或实现MCP服务器的所有可能性。我将只实现要点:

  • 提供LLM工具列表
  • LLM调用这些工具时执行它们

当我使用法学硕士时,有一件事我想做:给它一个网站链接,这样它就可以在那里找到信息,为我做一个总结等等。

所以我创建了一个MCP服务器,它调用 curl 使用URL参数的实用程序并返回其内容。但是让我们看看源代码:

go.mod:

module mcp-curl

go 1.23.4

require github.com/mark3labs/mcp-go v0.8.2
require github.com/google/uuid v1.6.0

main.go:

package main

import (
	"context"
	"fmt"
	"os/exec"

	"github.com/mark3labs/mcp-go/mcp"
	"github.com/mark3labs/mcp-go/server"
)

func main() {
	// Create MCP server
	s := server.NewMCPServer(
		"mcp-curl",
		"1.0.0",
	)

	// Add a tool
	tool := mcp.NewTool("use_curl",
		mcp.WithDescription("fetch this webpage"),
		mcp.WithString("url",
			mcp.Required(),
			mcp.Description("url of the webpage to fetch"),
		),
	)

	// Add a tool handler
	s.AddTool(tool, curlHandler)

	fmt.Println("🚀 Server started")
	// Start the stdio server
	if err := server.ServeStdio(s); err != nil {
		fmt.Printf("😡 Server error: %v\n", err)
	}
	fmt.Println("👋 Server stopped")
}

func curlHandler(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {

	url, ok := request.Params.Arguments["url"].(string)
	if !ok {
		return mcp.NewToolResultError("url must be a string"), nil
	}
	cmd := exec.Command("curl", "-s", url)
	output, err := cmd.Output()
	if err != nil {
		return mcp.NewToolResultError(err.Error()), nil
	}
	content := string(output)

	return mcp.NewToolResultText(content), nil
}

解释

这真的很简单。我的服务器将只提供一个工具。该代码实现了一个服务器,该服务器公开了一个基于 curl 使用模型控制协议。

  • 首先,我创建了一个名为的MCP服务器 mcp-curl 版本 1.0.0 适用于标准输入/输出(stdio)
  • 然后我定义了一个名为 use_curl 这需要一个必要的 url 参数
  • 最后,我添加 handler 对于执行 curl 命令与 -s 检索网页内容的选项
  • 当然,我会处理错误并将网页内容作为文本返回

使用Docker打包MCP服务器

为了让我的生活更轻松,我会使用 Dockerfile 构建一个包含我的MCP服务器的Docker镜像。这样,我可以更容易地在不同的平台上部署它,或者让任何想使用它的人都可以使用它。

Dockerfile:

FROM golang:1.23.4-alpine AS builder
WORKDIR /app
COPY go.mod .
COPY main.go .

RUN <<EOF
go mod tidy 
go build
EOF

FROM curlimages/curl:8.6.0
WORKDIR /app
COPY --from=builder /app/mcp-curl .
ENTRYPOINT ["./mcp-curl"]

我的 Dockerfile 有两个部分:

  • 第一部分在Go中构建我的MCP服务器
  • 第二部分使用 curlimages/curl:8.6.0 包含以下内容的图像 curl 并复制我的 mcp-curl 服务器进入镜像(所以 mcp-curl 是调用的可执行文件 curl)

要构建Docker镜像,我运行以下命令:

docker build -t mcp-curl .

现在让我们看看如何使用我们的新MCP服务器 mcphost:

使用MCP服务器 mcphost

首先,我们需要创建一个配置文件 mcp.json 为了 mcphost:

{
  "mcpServers": {
    "mcp-curl-with-docker" :{
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "mcp-curl"
      ]
    }
  }
}

然后我们可以使用 mcphost 使用我们的MCP服务器和Ollama的LLM,如下所示:

mcphost --config ./mcp.json --model ollama:qwen2.5-coder:14b

MCP服务器由以下人员识别 mcphost: mcp

您可以通过以下方式请求可用工具列表 /tools 命令: mcp

现在,您可以请求网页的内容并分析其内容(在我的示例中,我从GitHub检索Go代码): mcp

等一下: mcp

以下是网页内容: mcp

结论

你可以看到,只需几行,就很容易给你的LLM赋予“超能力”。在未来的博客文章中,我将向您展示如何使用Ollama和Go中的MCP客户端创建生成式AI应用程序,以与我们的MCP服务器交互。

目录标签

目录标签

浏览器自动化ShellDocker本地部署MCP服务器网页抓取LLM增强Docker部署

接入字段

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

未说明

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

none

工具数量(toolCount,工具数)

1

资源数量(resourceCount,资源数)

0

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

0

权限和风险

未说明none部署方式未说明

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

安装前确认

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

仍需确认:installCommand

来源信息

继续浏览同类 MCP