MCP Server Boot Starters:快速构建AI工具集成服务的实战指南 如果你正在为 AI 应用或 Agent 系统寻找一种标准化的方式来集成外部数据源和工具那么你很可能已经听说过Model Context Protocol (MCP)。但面对官方文档和零散的开源项目一个最实际的问题摆在面前如何快速、稳定地启动一个 MCP Server并让它真正“跑”起来很多人以为 MCP 只是一个概念协议或者需要从零开始编写复杂的网络通信代码。这恰恰是最大的误区。MCP 的核心价值在于标准化接口而真正的工程效率提升来自于成熟的启动器Starters和开发框架。本文将聚焦于一个关键主题MCP Server Boot Starters特别是支持Streamable和HTTP传输协议的启动方案。我的核心判断是对于大多数希望集成 MCP 的开发者而言直接使用成熟的 Boot Starter 是性价比最高的选择。它能将你从底层协议细节中解放出来让你专注于业务逻辑即实现Tool和Resource从而在几分钟内构建出生产可用的 MCP 服务。读完本文你将彻底搞清楚MCP Server Boot Starter 究竟是什么解决了什么痛点如何为Streamable如 STDIO和HTTP协议选择和配置对应的 Starter从零开始一步步实现一个功能完整的 MCP Server 的完整代码和配置。部署、调试及生产环境的最佳实践与避坑指南。我们直接进入正题。1. MCP Server Boot Starters为什么它是你快速上手的“捷径”在深入代码之前我们必须理解“Boot Starter”在 MCP 生态中的定位。你可以把它类比为 Spring Boot 中的spring-boot-starter-web。在 Spring Boot 中你不需要手动配置 Tomcat、处理 Servlet 映射只需引入一个 Starter 依赖框架就为你准备好了完整的 Web 运行环境。MCP Server Boot Starter 扮演着完全相同的角色。MCP 协议定义了 Server 与 Client如 Claude Desktop、Cursor 等之间的通信模型Tool,Resource,Prompt和消息格式JSON-RPC。但是如何监听连接、解析消息、管理会话、处理错误这些网络和协议层的“脏活累活”如果都由你来实现将是一个巨大的工程负担。Boot Starter 的价值就在于它封装了所有协议层的复杂性。你只需要声明依赖引入对应传输协议如mcp-server-stdio,mcp-server-http的 Starter。定义能力用简单的代码定义你的Tool工具可被调用和Resource资源可被读取。启动应用像启动一个普通应用一样启动它Starter 会自动处理与 Client 的握手、通信和生命周期管理。没有 Starter你可能需要处理 JSON-RPC 的序列化/反序列化、STDIO 的阻塞读写、HTTP 的长连接管理。有了 Starter你只需要关心“我的这个工具要接收什么参数完成什么功能返回什么结果”2. 核心概念MCP、Server、Tool、Resource 与传输协议在动手之前快速统一一下关键术语确保我们在同一频道。Model Context Protocol (MCP)一个开放协议用于在 AI 应用程序Client和外部系统Server之间安全、标准化地传递上下文信息如数据、工具。它让 AI 能“安全地”访问外部世界。MCP Server实现 MCP 协议的服务端。它向 Client宣告Announce自己具备哪些能力Capabilities并响应 Client 的调用请求。ToolServer 提供的一个可执行函数。Client 可以调用它并传递参数。例如“获取当前天气”、“查询数据库”、“发送邮件”。在代码中你实现一个函数并将其包装成Tool对象。ResourceServer 提供的一个可读数据源。Client 可以读取其内容。例如“项目 README 文件”、“数据库表结构文档”、“API 规格说明”。Resource由 URI 标识内容可以是文本或二进制数据。传输协议TransportServer 与 Client 通信的通道。MCP 主要支持两种Streamable (STDIO)通过标准输入输出进行通信。这是Claude Desktop等本地应用最常用的方式简单、无需网络。HTTP通过 HTTP/SSE (Server-Sent Events) 进行通信。适用于 Server 需要远程访问的场景如部署在云服务器上。Boot Starter一个预先配置好的库或模块它根据你选择的传输协议自动搭建好 MCP Server 的通信骨架。你只需“启动”它。3. 环境准备选择你的技术栈MCP 生态目前有多种语言实现最活跃的是TypeScript/Node.js和Python。本文将以Node.js (TypeScript)环境为例进行演示因为其生态中的 Boot Starter 最为成熟。Python 的mcp库也提供了类似的高层抽象。前置条件Node.js版本 18 或更高推荐 LTS 版本。可使用node --version检查。npm或yarn或pnpm包管理工具。TypeScript可选但推荐用于更好的类型提示和开发体验。可通过npm install -g typescript安装。一个代码编辑器如 VS Code。我们的目标创建一个项目分别实现基于STDIO和HTTP的 MCP Server。4. 项目初始化与基础依赖安装首先创建一个新的项目目录并初始化。# 创建项目目录并进入 mkdir my-mcp-server cd my-mcp-server # 初始化 npm 项目 npm init -y # 初始化 TypeScript 配置 npx tsc --init编辑生成的tsconfig.json确保包含以下关键配置以支持现代 ES 模块和便捷的开发设置。{ compilerOptions: { target: ES2022, module: ESNext, moduleResolution: node, esModuleInterop: true, forceConsistentCasingInFileNames: true, strict: true, skipLibCheck: true, outDir: ./dist, rootDir: ./src, resolveJsonModule: true }, include: [src/**/*], exclude: [node_modules, dist] }接下来安装 MCP 的核心依赖。我们将使用modelcontextprotocol/sdk这个官方 SDK。npm install modelcontextprotocol/sdk5. 方案一使用 STDIO Boot Starter 构建本地 ServerSTDIO 模式是本地集成的最简单方式。我们将使用modelcontextprotocol/sdk内置的服务器工具来快速启动。5.1 创建 STDIO Server 入口文件在src目录下创建server-stdio.ts。// 文件路径src/server-stdio.ts import { Server } from modelcontextprotocol/sdk/server/index.js; import { StdioServerTransport } from modelcontextprotocol/sdk/server/stdio.js; import { CallToolRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, ListResourcesRequestSchema, } from modelcontextprotocol/sdk/types.js; // 1. 创建 Server 实例 const server new Server( { name: my-mcp-server, version: 1.0.0, }, { capabilities: { // 声明 Server 支持的能力工具和资源 tools: {}, resources: {}, }, } ); // 2. 定义工具Tool // 示例一个简单的计算器工具 server.setRequestHandler(ListToolsRequestSchema, async () { return { tools: [ { name: calculate, description: 执行简单的数学计算加、减、乘、除, inputSchema: { type: object, properties: { operation: { type: string, enum: [add, subtract, multiply, divide], description: 运算类型, }, a: { type: number, description: 第一个数字 }, b: { type: number, description: 第二个数字 }, }, required: [operation, a, b], }, }, ], }; }); server.setRequestHandler(CallToolRequestSchema, async (request) { if (request.params.name ! calculate) { throw new Error(未知的工具: ${request.params.name}); } const { operation, a, b } request.params.arguments as { operation: add | subtract | multiply | divide; a: number; b: number; }; let result: number; switch (operation) { case add: result a b; break; case subtract: result a - b; break; case multiply: result a * b; break; case divide: if (b 0) { throw new Error(除数不能为零); } result a / b; break; default: throw new Error(不支持的运算: ${operation}); } return { content: [ { type: text, text: 计算结果${a} ${operation} ${b} ${result}, }, ], }; }); // 3. 定义资源Resource // 示例一个静态的配置文件资源 server.setRequestHandler(ListResourcesRequestSchema, async () { return { resources: [ { uri: file:///config/app-info, mimeType: application/json, name: 应用信息, description: 当前 MCP 服务器的基本信息, }, ], }; }); server.setRequestHandler(ReadResourceRequestSchema, async (request) { if (request.params.uri ! file:///config/app-info) { throw new Error(未知的资源: ${request.params.uri}); } const appInfo { name: My MCP Server, version: 1.0.0, status: running, timestamp: new Date().toISOString(), }; return { contents: [ { uri: request.params.uri, mimeType: application/json, text: JSON.stringify(appInfo, null, 2), }, ], }; }); // 4. 错误处理重要 server.onerror (error) { console.error([MCP Server Error], error); }; // 5. 启动 Server使用 STDIO 传输 async function main() { const transport new StdioServerTransport(); await server.connect(transport); console.error(MCP Server (STDIO) 已启动等待连接...); } main().catch((error) { console.error(启动失败:, error); process.exit(1); });5.2 编译与运行在package.json中添加脚本。{ scripts: { build: tsc, serve:stdio: node dist/server-stdio.js } }编译并运行# 编译 TypeScript npm run build # 运行 STDIO Server npm run serve:stdio运行后程序会阻塞等待 Client 通过标准输入输出进行连接。这就是一个最简单的、功能完整的 MCP Server。如何测试它你需要一个 MCP Client。最方便的是使用Claude Desktop并配置其claude_desktop_config.json来指向你的本地 Server 脚本。或者你可以使用modelcontextprotocol/sdk包中提供的测试工具mcp-client如果可用或自己编写一个简单的测试客户端。6. 方案二使用 HTTP/SSE Boot Starter 构建远程 ServerHTTP 模式允许你将 Server 部署在任何地方。我们将基于流行的 Web 框架Express来构建 HTTP SSE 服务器。这里我们需要手动处理 HTTP 和 SSE因为官方 SDK 更偏向于传输层抽象但模式非常固定。6.1 安装 HTTP 相关依赖npm install express cors npm install --save-dev types/express types/cors6.2 创建 HTTP Server 入口文件在src目录下创建server-http.ts。// 文件路径src/server-http.ts import express from express; import cors from cors; import { Server } from modelcontextprotocol/sdk/server/index.js; import { SSEServerTransport } from modelcontextprotocol/sdk/server/sse.js; import { CallToolRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, ListResourcesRequestSchema, } from modelcontextprotocol/sdk/types.js; // 1. 创建 Express 应用和 Server 实例 const app express(); const PORT process.env.PORT || 3000; app.use(cors()); app.use(express.json()); const server new Server( { name: my-mcp-http-server, version: 1.0.0, }, { capabilities: { tools: {}, resources: {}, prompts: {}, // HTTP 模式下也可以支持 Prompts }, } ); // 2. 复用或重新定义工具和资源可以与 STDIO 版本相同 // 为节省篇幅这里复用之前的 calculate 工具和 app-info 资源。 // 在实际项目中你可以将业务逻辑抽离成共享模块。 server.setRequestHandler(ListToolsRequestSchema, async () { return { tools: [ { name: calculate, description: 执行简单的数学计算加、减、乘、除, inputSchema: { type: object, properties: { operation: { type: string, enum: [add, subtract, multiply, divide], description: 运算类型, }, a: { type: number, description: 第一个数字 }, b: { type: number, description: 第二个数字 }, }, required: [operation, a, b], }, }, // 可以添加更多工具... { name: get_server_time, description: 获取服务器当前时间, inputSchema: { type: object, properties: {} }, }, ], }; }); server.setRequestHandler(CallToolRequestSchema, async (request) { if (request.params.name calculate) { // ... 同上文 calculate 工具的实现 ... const { operation, a, b } request.params.arguments as any; let result: number; switch (operation) { case add: result a b; break; case subtract: result a - b; break; case multiply: result a * b; break; case divide: if (b 0) throw new Error(除数不能为零); result a / b; break; default: throw new Error(不支持的运算: ${operation}); } return { content: [{ type: text, text: 结果: ${result} }], }; } else if (request.params.name get_server_time) { return { content: [{ type: text, text: 服务器时间: ${new Date().toISOString()}, }], }; } throw new Error(未知的工具: ${request.params.name}); }); server.setRequestHandler(ListResourcesRequestSchema, async () { return { resources: [ { uri: file:///config/app-info, mimeType: application/json, name: 应用信息, description: 当前 MCP 服务器的基本信息, }, { uri: file:///docs/help, mimeType: text/plain, name: 帮助文档, description: 本 MCP Server 的使用说明, }, ], }; }); server.setRequestHandler(ReadResourceRequestSchema, async (request) { const uri request.params.uri; if (uri file:///config/app-info) { const appInfo { name: HTTP MCP Server, version: 1.0.0, status: online }; return { contents: [{ uri, mimeType: application/json, text: JSON.stringify(appInfo, null, 2), }], }; } else if (uri file:///docs/help) { return { contents: [{ uri, mimeType: text/plain, text: # 帮助文档\n这是一个示例 MCP HTTP 服务器。\n可用工具calculate, get_server_time。\n可用资源app-info, help。, }], }; } throw new Error(未知的资源: ${uri}); }); server.onerror (error) { console.error([MCP HTTP Server Error], error); }; // 3. 设置 SSE 端点 app.get(/sse, async (req, res) { console.log(新的 SSE 客户端连接); // 设置 SSE 必需的头部 res.writeHead(200, { Content-Type: text/event-stream, Cache-Control: no-cache, Connection: keep-alive, }); // 创建 SSE 传输层并连接到 Server const transport new SSEServerTransport(/message, res); await server.connect(transport); // 当客户端关闭连接时清理 req.on(close, () { console.log(SSE 客户端断开连接); // 这里 SDK 可能会自动处理但确保资源释放是好的实践 }); }); // 4. 设置接收客户端消息的端点 app.post(/message, express.text({ type: */* }), async (req, res) { // 这个端点由 SSEServerTransport 内部使用用于接收 Client 发来的请求 // 通常不需要直接处理transport 会接管 // 但为了完整性我们在这里记录一下 console.log(收到客户端消息:, req.body?.substring(0, 200)); // 实际的消息处理由 transport 和 server 完成 res.status(200).send(); }); // 5. 健康检查端点 app.get(/health, (req, res) { res.json({ status: ok, server: mcp-http-server }); }); // 6. 启动 HTTP 服务器 app.listen(PORT, () { console.log(MCP HTTP Server 运行在 http://localhost:${PORT}); console.log(SSE 端点: http://localhost:${PORT}/sse); console.log(健康检查: http://localhost:${PORT}/health); });6.3 更新脚本并运行更新package.json中的脚本。{ scripts: { build: tsc, serve:stdio: node dist/server-stdio.js, serve:http: node dist/server-http.js, dev:http: tsx src/server-http.ts // 使用 tsx 进行开发时热重载需安装 tsx } }安装tsx用于开发可选npm install --save-dev tsx运行 HTTP Server# 编译后运行 npm run build npm run serve:http # 或使用 tsx 直接运行无需先编译 npm run dev:http现在你的 MCP Server 已经在http://localhost:3000上运行。Client 可以通过连接到/sse端点来建立 MCP 会话。7. 运行结果与效果验证如何验证你的 Server 是否正常工作这里提供两种方法。7.1 使用简易测试脚本验证推荐创建一个简单的测试客户端脚本test-client.js放在项目根目录使用 Node.js 直接运行无需编译。// 文件路径test-client.js // 这是一个非常简化的测试用于验证 Server 的基本响应 // 注意这并非一个完整的 MCP Client仅用于冒烟测试 async function testStdioServer() { const { spawn } require(child_process); const serverProcess spawn(node, [dist/server-stdio.js], { stdio: [pipe, pipe, inherit] // 继承 stderr 以便查看错误 }); // 模拟发送一个简单的 JSON-RPC 请求ListTools const request JSON.stringify({ jsonrpc: 2.0, id: 1, method: tools/list, params: {} }) \n; console.log(发送请求:, request); serverProcess.stdin.write(request); serverProcess.stdin.end(); // 结束输入 let output ; serverProcess.stdout.on(data, (data) { output data.toString(); }); await new Promise((resolve) { serverProcess.stdout.on(end, resolve); setTimeout(() { console.log(等待超时强制结束进程); serverProcess.kill(); resolve(); }, 3000); }); console.log(收到响应:, output); try { const response JSON.parse(output.trim().split(\n).find(line line.startsWith({))); console.log(解析后的响应:, JSON.stringify(response, null, 2)); if (response.result?.tools) { console.log(✅ STDIO Server 工具列表响应正常); } else { console.log(❌ 响应格式可能不正确); } } catch (e) { console.error(❌ 解析响应失败:, e.message); } } async function testHttpServer() { const http require(http); const options { hostname: localhost, port: 3000, path: /health, method: GET, }; return new Promise((resolve) { const req http.request(options, (res) { let data ; res.on(data, (chunk) { data chunk; }); res.on(end, () { console.log(HTTP 健康检查状态码: ${res.statusCode}); console.log(响应体: ${data}); if (res.statusCode 200) { console.log(✅ HTTP Server 健康检查通过); } else { console.log(❌ HTTP Server 可能未正常运行); } resolve(); }); }); req.on(error, (e) { console.error(❌ HTTP 请求失败: ${e.message}); resolve(); }); req.end(); }); } (async () { console.log( 测试 STDIO Server ); await testStdioServer(); console.log(\n 测试 HTTP Server ); await testHttpServer(); })();运行测试# 首先确保 HTTP Server 在运行另一个终端运行 npm run serve:http # 然后运行测试脚本 node test-client.js7.2 使用 Claude Desktop 进行集成测试真实场景这是最真实的验证方式。你需要配置 Claude Desktop 来连接你的本地 Server。找到 Claude Desktop 配置目录macOS:~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:%APPDATA%\Claude\claude_desktop_config.jsonLinux:~/.config/Claude/claude_desktop_config.json编辑配置文件如果不存在则创建{ mcpServers: { my-local-server: { command: node, args: [/ABSOLUTE/PATH/TO/YOUR/PROJECT/dist/server-stdio.js], env: {} }, my-remote-server: { url: http://localhost:3000/sse } } }注意args中的路径必须使用绝对路径。url对应你的 HTTP Server 的 SSE 端点。重启 Claude Desktop。在 Claude 聊天框中你应该能看到一个“螺丝刀”图标点击后可以查看可用的工具Tools和资源Resources。你可以尝试让 Claude 调用calculate工具。8. 常见问题与排查思路在开发和部署 MCP Server 时你几乎一定会遇到下面这些问题。这里提供一个快速排查清单。问题现象可能原因排查方式解决方案Claude Desktop 不显示工具1. 配置文件路径错误。2. Server 启动失败或立即退出。3. Server 未正确实现ListTools请求处理。4. 协议版本不兼容。1. 检查 Claude Desktop 日志Help → Troubleshooting → View Logs。2. 在终端直接运行 Server 脚本看是否有错误输出。3. 使用上文test-client.js脚本测试tools/list请求。1. 确保配置文件中command和args的路径绝对正确。2. 确保 Server 脚本没有语法错误且持续运行不退出。3. 检查server.setRequestHandler是否正确绑定了ListToolsRequestSchema。Server 启动后立即退出1. 未使用async/await或未处理 Promise 导致主函数提前结束。2. 未调用server.connect(transport)或调用失败。3. 代码中存在未捕获的异常。1. 在main()函数末尾添加setInterval(() {}, 1000)临时阻止退出以观察。2. 检查控制台错误信息。3. 使用try...catch包裹main()函数调用。1. 确保main()是async函数并且await server.connect()。2. 添加全局未捕获异常监听process.on(uncaughtException, ...)。3. STDIO 模式下确保没有意外关闭process.stdin。HTTP Server 客户端无法连接1. 端口被占用。2. CORS 问题浏览器测试时。3. SSE 端点路径不正确。4. 防火墙阻止。1. 使用netstat -an | grep 3000(Linux/macOS) 或netstat -ano | findstr 3000(Windows) 检查端口。2. 检查浏览器控制台 Network 标签页的报错。3. 使用curl http://localhost:3000/health测试基础 HTTP。1. 更换端口号。2. 确保 Express 使用了cors()中间件。3. 确认 Client 连接的 URL 是http://your-server:port/sse。4. 检查服务器防火墙设置。工具调用返回错误1. 工具参数验证失败。2. 工具处理函数抛出异常。3. 返回格式不符合 MCP 规范。1. 查看 Server 日志中的具体错误信息。2. 在CallToolRequestSchema的处理函数中添加详细的console.log。3. 对比官方 SDK 示例中的返回格式。1. 确保inputSchema定义与处理函数中的参数解析逻辑一致。2. 使用try...catch包裹工具逻辑返回格式化的错误信息。3. 返回的content必须是数组且元素包含type和text字段。资源读取返回空或错误1.uri不匹配。2.mimeType设置错误。3. 返回的text不是字符串。1. 检查ListResources返回的uri与ReadResource请求的uri是否完全一致。2. 确保ReadResource返回的contents数组结构正确。1. 使用常量或枚举来管理uri避免拼写错误。2. 对于 JSON 资源mimeType设为application/jsontext为JSON.stringify()后的字符串。9. 最佳实践与工程建议当你掌握了基础搭建后以下建议能帮助你将 MCP Server 用于真实生产环境。项目结构组织不要把所有逻辑都塞在一个文件里。建议按功能拆分。src/ ├── server/ # 服务器启动入口 (stdio.ts, http.ts) ├── tools/ # 工具定义与实现 │ ├── calculator.ts │ └── systemInfo.ts ├── resources/ # 资源定义与实现 │ ├── appInfo.ts │ └── documentation.ts ├── shared/ # 共享类型与工具函数 └── index.ts # 主逻辑聚合配置化管理将服务器名称、版本、支持的工具列表等通过配置文件如config.json或环境变量管理。错误处理与日志实现完善的日志系统如 Winston、Pino。在 Server 的onerror回调以及每个RequestHandler中记录错误和关键操作便于调试和监控。安全性HTTP Server考虑添加认证层如 API Key。可以在 SSE 连接建立前通过查询参数或 HTTP Header 进行验证。工具权限对于敏感操作的工具如数据库写入、服务器命令在实现内部进行权限校验。输入验证充分利用inputSchema进行严格的输入验证并在业务逻辑中再次校验。性能与可扩展性对于耗时的工具操作确保它们是异步的避免阻塞 MCP 的消息循环。HTTP Server 考虑使用集群模式Cluster或多进程来利用多核 CPU。使用连接池管理数据库等外部资源连接。版本兼容与演进当你的 Server 升级添加或修改工具时要考虑对现有 Client 的影响。可以通过工具版本号或提供多套能力声明来平滑过渡。测试为你的工具和资源编写单元测试。同时编写集成测试模拟完整的 MCP 请求-响应流程确保协议层面的正确性。通过遵循上述步骤和最佳实践你不仅能够快速启动一个 MCP Server更能构建出一个健壮、可维护、可用于实际生产的 AI 能力扩展服务。MCP 的潜力在于将你的内部系统、API 和数据安全地暴露给 AI而 Boot Starter 模式则是你开启这扇大门的钥匙。现在你可以将精力从协议细节转移到创造更有价值的工具和资源上了。

相关新闻

最新新闻

反直觉的追及问题

反直觉的追及问题

问题背景快到年末了,朋友公司有个很奇葩的要求,需要每年完成跑步任务,完不成的的会影响到KPI。为了完成这N公里的跑步,很多人选择了步数神器——摇手机。 摇了手机之后发现,有一条要求比较麻烦,至少完成一次…

2026/7/4 9:10:58
AI驱动测试革命:DeepSeek与Playwright实现自动化脚本智能生成

AI驱动测试革命:DeepSeek与Playwright实现自动化脚本智能生成

1. 项目概述:当AI大模型遇上现代浏览器自动化最近在搞自动化测试的团队,估计没少为写测试脚本头疼。尤其是UI自动化,一个页面改个按钮位置,可能就得花半天时间去调定位器,更别提那些复杂的交互流程和异常场景覆盖了。我…

2026/7/4 9:10:58
AI驱动自动化测试:DeepSeek与Playwright结合提升测试覆盖率实践

AI驱动自动化测试:DeepSeek与Playwright结合提升测试覆盖率实践

1. 项目概述:当AI代码助手遇上现代浏览器自动化最近在搞自动化测试的团队,估计没少为写脚本和维护脚本头疼。特别是UI自动化,页面元素一变,脚本就得跟着改,维护成本高不说,测试覆盖率也常常是个老大难问题。…

2026/7/4 9:10:58
HsMod:炉石传说终极增强插件,55项功能重塑你的卡牌游戏体验

HsMod:炉石传说终极增强插件,55项功能重塑你的卡牌游戏体验

HsMod:炉石传说终极增强插件,55项功能重塑你的卡牌游戏体验 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod 你是否厌倦了炉石传说中繁琐的日常任务?是否…

2026/7/4 9:10:58
Agent Skills技能中间件:在技能执行链中插入处理逻辑

Agent Skills技能中间件:在技能执行链中插入处理逻辑

Agent Skills技能中间件:在技能执行链中插入处理逻辑 【免费下载链接】agentskills Specification and documentation for Agent Skills 项目地址: https://gitcode.com/GitHub_Trending/ag/agentskills Agent Skills是GitHub推荐项目精选(ag/age…

2026/7/4 9:10:58
pg_tileserv 项目常见问题解决方案

pg_tileserv 项目常见问题解决方案

pg_tileserv 项目常见问题解决方案 【免费下载链接】pg_tileserv A very thin PostGIS-only tile server in Go. Takes in HTTP tile requests, executes SQL, returns MVT tiles. 项目地址: https://gitcode.com/gh_mirrors/pg/pg_tileserv 基础介绍 pg_tileserv 是一…

2026/7/4 9:05:58

周新闻

月新闻