MCP 官方开源 Registry 注册服务:基于 Go 和 MongoDB 构建

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 作为 `registry` 项目的贡献者,我很高兴能参与这个社区驱动的开源项目,也期待它不断发展壮大。本文将对 `registry` 服务进行介绍,为项目的推广尽一份绵薄之力。

作者:陈明勇,一名热爱技术、乐于分享的开发者,同时也是开源爱好者。

我专注于分享 Go 语言相关的技术知识,同时也会深入探讨 AI 领域的前沿技术。

成功的路上并不拥挤,有没有兴趣结个伴?

Go 开源库代表作:go-mongoxgo-optioner

文章持续更新,如果本文能让您有所收获,欢迎关注本号。

微信阅读可搜《程序员陈明勇》。

前言

随着人工智能的快速发展,大型语言模型(LLM)在各类场景中的应用日益广泛。而如何让这些模型高效地与外部数据源和工具交互,成为一个重要课题。Model Context Protocol(MCP)作为开放协议,为 LLM 提供了标准化接口,简化了与外部系统的集成。

为更好地管理和发现 MCP 服务器,registry 项目应运而生。作为一个社区驱动的开源注册服务,registry 提供集中式存储和管理功能,帮助开发者轻松发现和管理 MCP 服务器及其相关元数据、配置和功能。

作为 registry 项目的贡献者,我很高兴能参与这个社区驱动的开源项目,也期待它不断发展壮大。本文将对 registry 服务进行介绍,为项目的推广尽一份绵薄之力。

准备好了吗?准备一杯你最喜欢的咖啡或茶,随着本文一探究竟吧。

Registry

registry 项目是一个由社区驱动的注册服务,用于管理和发现 Model Context Protocol (MCP) 服务器。而 MCP 是一个开放协议,旨在促进大型语言模型(LLM)与外部数据源和工具的无缝集成。

registry 服务提供了一个集中式的存储库,用于管理 MCP 服务器的条目。它允许发现和管理各种 MCP 服务器及其相关的元数据、配置和功能。

Github 地址:MCP registry

主要功能

  • RESTful API:用于对 MCP 服务的注册信息进行管理,包括:
    • 查看服务列表(List
    • 获取单个服务信息(Get
    • 添加服务(Create
    • 修改服务信息(Update
    • 删除服务(Delete
  • 健康检查端点:用于服务监控。
  • 环境配置支持:支持多种环境配置。
  • 优雅的关闭处理:确保服务的平稳关闭。
  • 数据库支持:支持 MongoDB 和内存数据库。
  • API 文档:提供全面的 API 文档。
  • 分页支持:支持分页查询所注册 mcp服务条目。

部署与使用

我们可以通过两种方式启动 Registry 项目:本地运行docker 部署

本地运行

前置条件:需要安装 Go 1.18+ 的环境和运行 MongoDB

首先,我们需要将 registry 项目的源码下载到本地,然后在项目根目录下通过以下命令运行项目:

go run ./cmd/registry

默认访问地址为:http://localhost:8080

Docker 部署

运行以下命令将创建两个容器分别用于启动 MongoDBRegistry 服务:

docker compose up -d

默认将通过端口 8080 提供服务。

配置

registry 服务支持通过环境变量进行灵活配置,以适应不同的运行环境和需求。以下是支持的环境变量及其默认值说明:

变量名 描述 默认值
MCP_REGISTRY_APP_VERSION 应用程序版本 dev
MCP_REGISTRY_DATABASE_TYPE 数据库类型 mongodb
MCP_REGISTRY_COLLECTION_NAME MongoDB 集合名称 servers_v2
MCP_REGISTRY_DATABASE_NAME MongoDB 数据库名称 mcp-registry
MCP_REGISTRY_DATABASE_URL MongoDB 连接字符串 mongodb://localhost:27017
MCP_REGISTRY_GITHUB_CLIENT_ID GitHub 应用程序客户端 ID
MCP_REGISTRY_GITHUB_CLIENT_SECRET GitHub 应用程序客户端密钥
MCP_REGISTRY_LOG_LEVEL 日志级别 info
MCP_REGISTRY_SEED_FILE_PATH 导入种子文件的路径 data/seed.json
MCP_REGISTRY_SEED_IMPORT 首次运行时是否导入种子文件 true
MCP_REGISTRY_SERVER_ADDRESS 服务监听地址 :8080

配置说明

  • 灵活性:通过环境变量,您可以轻松调整服务的运行参数,例如切换数据库类型、修改日志级别或更改服务监听地址。
  • 数据库类型MCP_REGISTRY_DATABASE_TYPE 支持两种数据库类型:mongodbmemory。其中,memory 为内存数据库,适合测试或轻量级场景。
  • 种子文件导入MCP_REGISTRY_SEED_FILE_PATHMCP_REGISTRY_SEED_IMPORT 允许您在首次运行时自动导入初始数据,方便快速启动服务。
  • GitHub 集成:如果需要使用 GitHub 相关功能,可以通过设置 MCP_REGISTRY_GITHUB_CLIENT_IDMCP_REGISTRY_GITHUB_CLIENT_SECRET 来完成配置。
  • 日志管理:通过 MCP_REGISTRY_LOG_LEVEL,您可以控制日志的详细程度,例如设置为 debug 以便调试。

通过合理配置这些环境变量,您可以根据实际需求定制 registry 服务的行为。

Swagger API 文档

在启动 registry 项目之后,我们可以通过 /v0/swagger/index.html 端点访问 Swagger API 文档:

image.png

通过这个文档,你可以查看每个接口的请求方法、参数说明、响应格式等详细信息,还可以直接在浏览器中发送请求进行调试。

小结

registry 项目作为一个社区驱动的开源注册服务,为 MCP 生态系统提供了集中式的管理和发现能力。无论是通过 RESTful API 管理 MCP 服务器条目,还是通过灵活的环境变量配置,registry 都展现了其强大的功能和适应性。此外,支持 MongoDB 和内存数据库的多样化存储选项,以及直观的 Swagger API 文档,都让开发者能够快速上手并高效使用。

虽然项目仍处于早期开发阶段,但它已经为 MCP 生态系统奠定了坚实的基础。作为 registry 项目的贡献者,我很高兴能参与这个社区驱动的开源项目,也期待它不断发展壮大。

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
3月前
|
监控 Java Go
无感改造,完美监控:Docker 多阶段构建 Go 应用无侵入观测
本文将介绍一种基于 Docker 多阶段构建的无侵入 Golang 应用观测方法,通过此方法用户无需对 Golang 应用源代码或者编译指令做任何改造,即可零成本为 Golang 应用注入可观测能力。
239 85
|
26天前
|
JSON 编解码 API
Go语言网络编程:使用 net/http 构建 RESTful API
本章介绍如何使用 Go 语言的 `net/http` 标准库构建 RESTful API。内容涵盖 RESTful API 的基本概念及规范,包括 GET、POST、PUT 和 DELETE 方法的实现。通过定义用户数据结构和模拟数据库,逐步实现获取用户列表、创建用户、更新用户、删除用户的 HTTP 路由处理函数。同时提供辅助函数用于路径参数解析,并展示如何设置路由器启动服务。最后通过 curl 或 Postman 测试接口功能。章节总结了路由分发、JSON 编解码、方法区分、并发安全管理和路径参数解析等关键点,为更复杂需求推荐第三方框架如 Gin、Echo 和 Chi。
|
25天前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:使用 Gin 快速构建 Web 服务
Gin 是一个高效、轻量级的 Go 语言 Web 框架,支持中间件机制,非常适合开发 RESTful API。本文从安装到进阶技巧全面解析 Gin 的使用:快速入门示例(Hello Gin)、定义 RESTful 用户服务(增删改查接口实现),以及推荐实践如参数校验、中间件和路由分组等。通过对比标准库 `net/http`,Gin 提供更简洁灵活的开发体验。此外,还推荐了 GORM、Viper、Zap 等配合使用的工具库,助力高效开发。
|
7月前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
3月前
|
人工智能 搜索推荐 程序员
用 Go 语言轻松构建 MCP 客户端与服务器
本文介绍了如何使用 mcp-go 构建一个完整的 MCP 应用,包括服务端和客户端两部分。 - 服务端支持注册工具(Tool)、资源(Resource)和提示词(Prompt),并可通过 stdio 或 sse 模式对外提供服务; - 客户端通过 stdio 连接服务器,支持初始化、列出服务内容、调用远程工具等操作。
952 4
|
存储 安全 测试技术
【Go语言精进之路】构建高效Go程序:了解map实现原理并高效使用
【Go语言精进之路】构建高效Go程序:了解map实现原理并高效使用
113 3
|
存储 监控 Go
【Go语言精进之路】构建高效Go程序:了解切片实现原理并高效使用
【Go语言精进之路】构建高效Go程序:了解切片实现原理并高效使用
187 3
|
8月前
|
缓存 监控 前端开发
在 Go 语言中实现 WebSocket 实时通信的应用,包括 WebSocket 的简介、Go 语言的优势、基本实现步骤、应用案例、注意事项及性能优化策略,旨在帮助开发者构建高效稳定的实时通信系统
本文深入探讨了在 Go 语言中实现 WebSocket 实时通信的应用,包括 WebSocket 的简介、Go 语言的优势、基本实现步骤、应用案例、注意事项及性能优化策略,旨在帮助开发者构建高效稳定的实时通信系统。
374 1
|
8月前
|
存储 负载均衡 监控
如何利用Go语言的高效性、并发支持、简洁性和跨平台性等优势,通过合理设计架构、实现负载均衡、构建容错机制、建立监控体系、优化数据存储及实施服务治理等步骤,打造稳定可靠的服务架构。
在数字化时代,构建高可靠性服务架构至关重要。本文探讨了如何利用Go语言的高效性、并发支持、简洁性和跨平台性等优势,通过合理设计架构、实现负载均衡、构建容错机制、建立监控体系、优化数据存储及实施服务治理等步骤,打造稳定可靠的服务架构。
182 1
|
9月前
|
中间件 Go API
使用Go语言构建高性能RESTful API
在现代软件开发中,RESTful API因其简洁和高效而成为构建网络服务的首选。Go语言以其并发处理能力和高性能著称,是开发RESTful API的理想选择。本文将介绍如何使用Go语言构建RESTful API,包括基础的路由设置、中间件的使用、数据验证、错误处理以及性能优化。通过实际代码示例,我们将展示Go语言在API开发中的强大功能和灵活性。