V MCP服务器模板
用于用V编程语言创建模型上下文协议(MCP)服务器的模板存储库。此模板提供了一个干净、最小的基础,您可以扩展它来构建自己的MCP服务器。
概述
此模板包括:
- JSON-RPC 2.0协议的实现:完成MCP协议处理
- 模块化架构:关注点的清晰分离(协议、服务器、工具)
- 工具注册系统:易于扩展工具处理程序注册
- 配置管理:基于环境变量的配置
- 生成脚本:适用于Windows和Unix的现成构建脚本
- 示例工具:示例工具实现以指导您的开发
快速开始
先决条件
- V编程语言 已安装并位于PATH上
入门指南
- 使用此模板 创建自己的存储库:
- 在GitHub上点击“使用此模板”,或 - 克隆此存储库并删除 .git 目录
- 自定义模块名称 在
v.mod:
Module {
name: 'your_mcp_server' // Change this
description: 'Your MCP server description'
version: '0.1.0'
dependencies: []
}- 自定义配置 在
src/server/config.v:
- 添加特定于服务器的配置字段 - 更新 from_env() 读取环境变量
- 添加您的工具 在
src/tools/tools.v:
- 实现工具处理程序功能 - 将它们注册到 register_all()
- 构建和测试:
# Linux/macOS
./build.sh
# Windows
build.bat- 运行您的服务器:
./mcp-server # or mcp-server.exe on Windows项目结构
.
├── src/
│ ├── main.v # Entry point and JSON-RPC message loop
│ ├── mcp/
│ │ └── mcp.v # JSON-RPC 2.0 protocol implementation
│ ├── server/
│ │ ├── config.v # Configuration management
│ │ └── server.v # Server state management
│ └── tools/
│ └── tools.v # Tool registry and handlers
├── build.sh # Linux/macOS build script
├── build.bat # Windows build script
├── v.mod # V module definition
└── README.md # This file定制指南
1.配置(src/server/config.v)
添加您的服务器特定配置:
pub struct ServerConfig {
pub:
data_path string = ''
cache_ttl_seconds int = 300
max_results int = 50
log_level string = 'INFO'
}
pub fn from_env() ServerConfig {
data_path := os.getenv('DATA_PATH')
// ... your configuration logic
return ServerConfig{
data_path: data_path
// ...
}
}2.服务器状态(src/server/server.v)
添加服务器的状态和方法:
pub struct ServerState {
pub mut:
config ServerConfig
cache map[string]CacheEntry
data map[string]string
}
pub fn new_server(config ServerConfig) ServerState {
return ServerState{
config: config
cache: map[string]CacheEntry{}
data: map[string]string{}
}
}3.工具(src/tools/tools.v)
实现您的工具处理程序:
fn handle_my_tool(params mcp.JsonAny, mut server_state server.ServerState) string {
// Extract parameters
query := mcp.extract_string_param(params, 'query') or {
return 'Error: Query parameter is required'
}
// Implement your logic
result := server_state.process_query(query)
// Return result (markdown format recommended)
return '# Results\n\n${result}'
}
fn (mut r ToolRegistry) register_all() {
r.handlers['my_tool'] = handle_my_tool
// Add more handlers...
}4.主要入口点(src/main.v)
自定义启动日志记录和初始化:
fn main() {
config := server.from_env()
mut server_state := server.new_server(config)
// Add your initialization logic here
server_state.initialize() or {
mcp.log('ERROR', 'Failed to initialize: ${err}')
return
}
mcp.log('INFO', 'Starting My MCP Server...')
// ... rest of the loop
}MCP协议
此模板实现了MCP使用的JSON-RPC 2.0协议。协议模块(src/mcp/mcp.v)手柄:
- 消息读/写(stdio)
- 请求/响应解析
- 错误处理
- 参数提取实用程序
除非需要自定义传输(HTTP、WebSocket等),否则不需要修改协议实现。
示例工具
该模板包括两个示例工具:
get_info:返回服务器信息example_tool:创建新工具的模板
用您自己的工具实现替换这些。
测试
通过stdin发送JSON-RPC请求来测试您的服务器:
echo '{"jsonrpc":"2.0","id":1,"method":"get_info","params":{}}' | ./mcp-server与MCP客户端集成
光标IDE
添加 .cursor/mcp.json:
{
"mcpServers": {
"my-server": {
"command": "/path/to/mcp-server",
"env": {
"LOG_LEVEL": "INFO"
}
}
}
}其他MCP客户端
服务器通过与所有MCP客户端兼容的stdio通过JSON-RPC 2.0进行通信。
最佳实践
- 工具命名:使用描述性的、面向行动的名称(例如。,
get_data,search_items,process_file)
- 错误处理:始终验证参数并返回明确的错误消息
- 响应格式:使用Markdown作为工具响应,以便在客户端中实现丰富的格式
- 日志记录:使用
mcp.log()对于重要事件和错误
- 配置:使用环境变量进行配置,以保持服务器的灵活性
- 状态管理:将服务器状态保持在
ServerState如有需要,确保其线程安全
扩展模板
添加缓存
pub struct CacheEntry {
data string
timestamp int
}
pub fn (mut s ServerState) get_cached(key string) ?string {
entry := s.cache[key] or { return none }
if time.now().unix - entry.timestamp > s.config.cache_ttl_seconds {
s.cache.delete(key)
return none
}
return entry.data
}添加文件操作
pub fn (mut s ServerState) load_data(path string) ! {
content := os.read_file(path)!
// Process content...
}添加搜索功能
pub fn (mut s ServerState) search(query string) []SearchResult {
// Implement search logic...
return results
}许可证
此模板按原样提供。请为您的项目自定义许可证。
贡献
如果你改进了这个模板,可以考虑回馈他人!
资源
示例项目
有关完整示例,请参阅:
- V-vlang-mcp -V语言MCP服务器
______________________________________________________________________
幸福大厦! 🚀
