项目简介
Baby API是一个用Go语言编写的超轻量级框架,旨在帮助开发者快速创建基于结构体(Struct)的CRUD (创建、读取、更新、删除) HTTP API。它通过自动化和简化的方式,让构建RESTful服务变得前所未有的简单。现在,Baby API进一步扩展了功能,集成了Model Context Protocol (MCP) 支持,使其能够作为LLM (大型语言模型) 应用的强大上下文服务框架。
主要功能点
- 自动化CRUD API生成: 仅需定义Go结构体,即可自动生成相应的创建、读取、更新、删除HTTP端点。
- 可插拔的存储后端: 默认使用内存KV存储,但支持通过实现'babyapi.Storage'接口轻松切换到文件、Redis或SQL等多种存储方案。
- 丰富的扩展能力: 提供'OnCreateOrUpdate'、'AddCustomRoute'、'Patch'等扩展点,支持自定义请求处理逻辑、添加额外路由和实现局部更新。
- 自动生成CLI客户端: 框架内置CLI工具,方便开发者与API进行交互和测试。
- 深度集成MCP协议: 将传统CRUD操作自动转化为LLM可调用的"工具" (Tools),提供标准化的上下文信息和功能。支持对MCP操作进行细粒度权限控制(读取、创建、更新、删除)。
- 会话管理和能力声明: MCP服务器端负责会话管理,并允许定义服务器指令(instructions),为LLM提供清晰的上下文理解。
- 支持多种传输协议: 通过'mcp-go'库,支持SSE等流式传输协议与LLM客户端通信。
安装步骤
- 创建新的Go模块:
mkdir my-mcp-server cd my-mcp-server go mod init my-mcp-server - 编写 'main.go' 文件: 定义资源结构体并初始化Baby API。
package main import ( "github.com/calvinmclean/babyapi" "github.com/mark3labs/mcp-go/server" // 导入MCP服务器选项 ) type MyResource struct { babyapi.DefaultResource // 继承默认资源以获取ID等功能 Name string Description string } func main() { api := babyapi.NewAPI( "MyResources", "/my-resources", func() *MyResource { return &MyResource{} }, ) // 启用MCP功能,并赋予所有CRUD权限 api.EnableMCP(babyapi.MCPPermCRUD) // 添加MCP服务器指令,为LLM提供关于此服务的描述 api.AddMCPServerOptions(server.WithInstructions("这是一个用于管理用户自定义资源的MCP服务器。你可以创建、读取、更新和删除MyResource对象。")) // 运行API服务器,同时启动内置的CLI客户端 api.RunCLI() } - 运行项目:
服务器将默认在 'http://localhost:8080' 启动。go mod tidy go run main.go serve
服务器配置
MCP服务器与MCP客户端通过JSON-RPC协议通信。MCP客户端需要以下配置信息来连接和使用此Baby API MCP服务器:
{ "mcpServers": { "myResourcesServer": { "type": "remote", "url": "${env://URL:-http://localhost:8080/mcp}", "environment": { "DEBUG": "${env://DEBUG:-false}", "LOG_LEVEL": "${env://LOG_LEVEL:-info}" } } } }
参数注释:
- 'myResourcesServer': 这是MCP客户端中为此服务器定义的唯一名称,可根据实际情况命名。
- 'type': 固定为 'remote',表示连接远程MCP服务器。
- 'url': MCP服务器的访问地址。默认情况下,Baby API的MCP端点为 '/mcp'。您可以配置环境变量 'URL' 来指定服务器地址,例如 'http://localhost:8080/mcp'。
- 'environment': 用于传递环境变量给MCP服务器,例如调试模式或日志级别。这些是可选的。
基本使用方法
与HTTP API交互 (通过内置CLI): 在服务器运行后,可以使用 'go run main.go client' 命令与API进行交互:
- 创建新资源:
go run main.go client myresources post --data '{"name": "Item 1", "description": "First item"}' - 获取所有资源:
go run main.go client myresources list - 通过ID获取资源: (假设上一步创建的资源ID为 'cljvfslo4020kglbctog')
go run main.go client myresources get cljvfslo4020kglbctog
与MCP客户端交互 (由LLM应用调用): MCP客户端 (例如 'mark3labs/mcphost') 会连接到配置的MCP服务器地址('http://localhost:8080/mcp')。客户端将能够:
- 发现工具: 客户端将通过MCP协议查询此服务器提供的工具列表,例如 'create_MyResources', 'get_MyResources', 'search_MyResources', 'update_MyResources', 'delete_MyResources'。
- 调用工具: LLM客户端可以根据工具的描述和输入Schema调用这些工具,例如:
服务器将执行相应的CRUD操作并返回结果。LLM应用可以利用这些工具来管理资源和获取上下文信息。{ "name": "create_MyResources", "arguments": { "name": "新任务", "description": "这是由LLM创建的任务" } }
信息
分类
网页与API