尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
如何用 V 语言 mcp 模块编写 MCP Server 并接入 AI 客户端
如何用 V 语言 mcp 模块编写 MCP Server 并接入 AI 客户端【免费下载链接】vSimple, fast, safe, compiled language for developing maintainable software. Compiles itself in 1s with zero library dependencies. Supports automatic C V translation. https://vlang.io项目地址: https://gitcode.com/GitHub_Trending/v/vvlib/mcp是 V 语言对 Model Context ProtocolMCP的原生实现同时提供客户端和服务端覆盖2025-11-25版规范。如果你的目标是写一个能被 Claude Desktop、Cursor 等 AI 客户端调用的 MCP Server本文给出完整路径用mcp模块创建 Server、注册 tools/resources/prompts、选择 stdio 或 Streamable HTTP 传输启动最后用 V 自带客户端和模块测试套件验证接入是否成功。模块能力与适用边界编写前先确认你的功能在模块支持范围内。vlib/mcp/README.md 给出的能力清单包括JSON-RPC 2.0 基础协议stdio 传输换行分隔Streamable HTTP 传输POST GETSSE会话管理Origin头校验DNS rebinding 防护Tools含annotations、Resources、资源模板、Prompts、completion/completelogging/setLevelnotifications/message、notifications/progress与合作式取消服务端主动发起的roots/list、sampling/createMessage、elicitation/create两项能力目前是 deferred 状态规划内不包含Tasks 工具tasks/*实验性和 OAuth 授权。如果你的接入方案依赖这两项当前版本无法满足。准备条件需要一个可用的 V 编译器仓库自带Makefile等构建入口可自行构建v。本文所有命令均假定v在PATH中且你在 V 仓库根目录下执行——示例代码路径如examples/mcp/server.v都是相对仓库根目录的。写一个最小可运行的 MCP Server模块 README 给出的 server quick start 是最短主路径mcp.new_server创建服务、add_tool注册一个工具、serve_stdio()以 stdio 传输启动。import mcp fn main() { mut server : mcp.new_server( name: my-v-mcp-server version: 1.0.0 enable_logging: true ) server.add_tool(mcp.Tool{ name: say_hello description: Greets the caller annotations: mcp.ToolAnnotations{ read_only_hint: true } }, fn (_ mcp.Context, _ string) !mcp.ToolResult { return mcp.tool_text_result(Hello, user!) })! server.serve_stdio()! }几个关键字段的用途定义见 vlib/mcp/server.v 中的ServerConfigname/version服务端标识客户端initialize握手后通过server_info拿到的就是它enable_logging声明logging能力允许客户端调用logging/setLevel。默认关闭只有当 Server 会发出notifications/message时才打开allowed_originsStreamable HTTP 下接受的Origin头白名单。留空时只接受没有Origin头或来自回环地址http://localhost[:port]、http://127.0.0.1[:port]、http://[::1][:port]、字面量null的请求http_pathHTTP 模式下服务挂载的路径默认/mcp。add_tool的 handler 签名是fn (ctx mcp.Context, arguments string) !ToolResult第二个参数是调用方传入的 JSON 字符串需要自己解码。input_schema字段则是原样的 JSON Schema 字符串AI 客户端靠它决定怎么传参。返回结果用mcp.tool_text_result(...)这类内容助手生成它们返回符合规范ContentBlock联合type: text | image | audio | resource | resource_link的 JSON 字符串。参考完整示例tools、resources、prompts 与 completions仓库内的 examples/mcp/server.v 是覆盖vlib/mcp全部能力的参考 Server可直接作为你的项目骨架。它的main里先注册四类能力再按命令行参数选择传输register_tools(mut server)! register_resources(mut server)! register_prompts(mut server)! register_completions(mut server)! // Strip a leading -- so the same binary works whether launched as // ./v run server.v -- --http :8080 (Vs run forwards --) or as the // pre-compiled binary ./server --http :8080. args : os.args[1..].filter(it ! --) if args.len 0 args[0] --http { addr : if args.len 1 { args[1] } else { 127.0.0.1:8080 } eprintln(mcp showcase listening on http://${addr}/mcp) server.serve_http(addr)! } else { server.serve_stdio()! }注册 tools 时示例展示了三类典型的ToolAnnotations写法echo标注read_only_hint: true且idempotent_hint: true纯只读、可重复调用delete_record标注destructive_hint: true提示宿主在调用前提醒用户。参数解码用的是json2server.add_tool(mcp.Tool{ name: count_to description: Count up to N with progress notifications. Cooperatively cancellable. input_schema: {type:object,required:[n],properties:{n:{type:integer,minimum:1,maximum:50}}} }, fn (ctx mcp.Context, arguments string) !mcp.ToolResult { args : json.decodeCountArgs or { return mcp.tool_text_result(invalid arguments: ${err.msg()}) } // ... return mcp.tool_text_result(counted to ${args.n}) })!resources、prompts 和 completions 的注册方式与 tools 同构分别在register_resources、register_prompts、register_completions函数中静态资源demo://welcome.txt、URI 模板demo://greet/{language}、带两个必填参数的reviewprompt以及针对language参数的补全对照supported_languages列表做前缀过滤。启动 Server 并选择传输参考示例文件头注释给出了两种启动方式# stdio 传输默认 v run examples/mcp/server.v # Streamable HTTP 传输监听 127.0.0.1:8080 v run examples/mcp/server.v -- --http # 指定其他地址 v run examples/mcp/server.v -- --http 127.0.0.1:9000注意--http前的--v run会把--之后的参数转发给程序示例代码里的filter(it ! --)同时兼容v run和已编译二进制两种启动方式。HTTP 模式启动后会在 stderr 打印mcp showcase listening on http://127.0.0.1:8080/mcp这是服务已就绪的信号。HTTP 模式下客户端与http://127.0.0.1:8080/mcp的交互行为由 README 明确约定POST默认返回 JSON仅当客户端发送Accept: text/event-stream时返回 SSEGET打开一个 SSE 流读取排队的通知可用Last-Event-ID断点续读DELETE终止会话必须携带MCP-Session-Id状态码语义Origin不被允许返回 403MCP-Protocol-Version不支持返回 400Accept中既无application/json也无text/event-stream返回 406。可选分支生产环境注意示例为了演示把allowed_origins设为[*]源码注释明确写了 *only for the demo; tighten this for real deployments。真实部署应改成具体的 Origin 值改成回环场景时也可以直接留空利用默认的回环白名单。接入 AI 客户端examples/mcp/server.v 的头部注释直接说明了接入方式Connect a client (e.g. Claude Desktop / Cursor / a custom MCP client) to the command above for stdio, or POST tohttp://127.0.0.1:8080/mcpfor HTTP.对应两条接入路径stdio在 AI 客户端的 MCP Server 配置中把启动命令指向上面的v run examples/mcp/server.v或你替换后的自己的 Server 文件客户端通过子进程的 stdin/stdout 与 Server 交换换行分隔的 JSON-RPC 消息。具体的客户端配置文件格式取决于各客户端自身文档V 仓库没有提供。HTTP客户端直接连接http://127.0.0.1:8080/mcp或你--http指定的地址按 Streamable HTTP 协议交互。如果你不用现成的 AI 客户端而是自己写一个 V 的 MCP 客户端mcp.v 提供了三种连接入口connect(url)/connect_http(url, config)连接 Streamable HTTP 端点connect_stdio(command, args, config)启动本地 stdio Server 进程作为传输层。验证接入结果验证分两层。第一层用 V 客户端完成握手。README 的 client quick startimport mcp fn main() { mut client : mcp.connect(http://localhost:8000/mcp)! init : client.initialize()! println(init.server_info.name) client.close() }运行前把connect的 URL 换成你自己 HTTP 端点的实际地址参考示例的默认值是http://127.0.0.1:8080/mcp。initialize()返回的server_info.name应该等于你new_server时传入的name——两边一致说明握手和序列化都正确。client.close()释放底层传输。第二层跑模块自身的测试套件。README 给出的命令v test vlib/mcp其中 spec_compliance_test.v 会把线上报文形状与官方 schema 逐项交叉比对。README 同时提醒任何时候改动了 payload 字段都要在这里补一个用例。长耗时工具进度与取消如果注册的工具要跑较长时间如示例的count_tohandler 收到的Context提供两个协作机制README Cancellation and progress 一节客户端请求里带_meta.progressToken时handler 调用ctx.notify_progress(progress, total, message)上报进度长循环中定期轮询ctx.is_cancelled()——客户端发送notifications/cancelled后该标记翻转为true直到请求结束。示例的count_to就是在循环里检查它并提前返回cancelled at ${i - 1}。这两个机制是可选项纯短耗时工具如echo不需要处理ctx。已知限制Tasks 工具tasks/*与 OAuth 授权在能力表中均为 deferred不可用mcp.connect/mcp.connect_http只面向 Streamable HTTP 端点stdio 场景要用mcp.connect_stdio启动子进程HTTP 模式的Origin校验默认只放行回环来源跨机器接入时务必显式配置allowed_origins避免所有请求被 403 拒绝。完成v test vlib/mcp与客户端握手验证后这个 V 编写的 MCP Server 就可以作为常驻服务挂给 AI 客户端使用了。【免费下载链接】vSimple, fast, safe, compiled language for developing maintainable software. Compiles itself in 1s with zero library dependencies. Supports automatic C V translation. https://vlang.io项目地址: https://gitcode.com/GitHub_Trending/v/v创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

从零实现大模型:Karpathy技能树拆解与实操指南

从零实现大模型:Karpathy技能树拆解与实操指南

看到“andrej-karpathy-skills”这个项目标题,可能有人第一反应是:这不过又是几期AI教学视频的合集。但我自己把这些内容从头到尾啃过一遍、照着敲过一轮代码之后,可以明确说,这背后并不是简单的“看视频学大模型”,而…

📅 2026/9/12 7:27:43
如何为 OpenClaude 新增一个模型网关(Gateway Descriptor)?

如何为 OpenClaude 新增一个模型网关(Gateway Descriptor)?

如何为 OpenClaude 新增一个模型网关(Gateway Descriptor)? 【免费下载链接】openclaude runs anywhere. uses anything 项目地址: https://gitcode.com/GitHub_Trending/op/openclaude 这篇文章面向 OpenClaude 的集成系统贡献者&…

📅 2026/9/12 7:27:43
Python实现积分系统动态控制算法与商业平衡

Python实现积分系统动态控制算法与商业平衡

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/12 7:27:43
MORE NEWS

更多资讯

📰

LeetCode 784 字母大小写全排列(Letter Case Permutation)Go 双解法深度解析

LeetCode 784 字母大小写全排列(Letter Case Permutation)Go 双解法深度解析 【免费下载链接】LeetCode-Go ✅ Solutions to LeetCode by Go, 100% test coverage, runtime beats 100% | LeetCode 题解 项目地址: https://gitcode.com/GitHub_Trending…

📰

制造业如何构建员工敢说真话的文化与机制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

把不同品牌的摄像头接进同一个流媒体中枢:go2rtc 上手与排障

把不同品牌的摄像头接进同一个流媒体中枢:go2rtc 上手与排障 【免费下载链接】go2rtc Ultimate camera streaming application 项目地址: https://gitcode.com/GitHub_Trending/go/go2rtc go2rtc 是一个用 Go 编写、零第三方运行时依赖的摄像头流媒体应用。它…

📰

浏览器直接打开 docx,dwg 图纸在线看:kkFileView 文档在线预览快速上手指南(3 步跑通)

浏览器直接打开 docx,dwg 图纸在线看:kkFileView 文档在线预览快速上手指南(3 步跑通) 【免费下载链接】kkFileView Universal File Online Preview Project based on Spring-Boot 项目地址: https://gitcode.com/GitHub_Trendi…

📰

9款高效降AI率工具全解析:本科生论文必备

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

芯片制造文档管理中UMeditor的Word导入优化方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬