MCP服务器演示-Hello World
一个简单的“Hello World”模型上下文协议(MCP)服务器实现,使用 Kotlin MCP SDK.
什么是MCP?
模型上下文协议(MCP)是一种标准化的协议,允许应用程序以一致的方式为大型语言模型(LLM)提供上下文。它将提供上下文的关注点与实际的LLM交互分开,实现了更好的模块化和可重用性。
项目概述
该项目展示了:
MCP服务器功能
- 2工具:hello(问候),echo(消息重复)
- 2资源:服务器信息,动态问候语
- 输入消毒:防止注射攻击
RAG管道(新!)
一个完整的检索增强生成系统,包括:
- 文件摄入:读取和解析Markdown/文本文件
- 智能分块:句子意识分裂与重叠
- 矢量嵌入:OpenAI文本嵌入3-small
- 矢量存储器:具有JSON持久性的内存数据库
看 RAG_README.md 获取完整的RAG文档。
先决条件
- Java 17或更高版本
- Gradle(包装内含)
建设项目
./gradlew clean build运行服务器
您可以在两种模式下运行MCP服务器:
1.标准模式(适用于克劳德桌面、MCP检查器)
服务器使用STDIO传输与MCP客户端通信:
./gradlew run或者运行编译后的JAR:
java -jar build/libs/mcp-server-demo-0.0.1-all.jar2.HTTP模式(用于Web应用程序、API)
在端口8080上作为HTTP服务器运行:
./gradlew runHttpServer然后通过HTTP访问:
# Health check
curl http://localhost:8080/health
# Call a tool
curl -X POST -H "Content-Type: application/json" \
-d '{"tool":"rag_query","arguments":{"query":"What type is Lapras?"}}' \
http://localhost:8080/mcp/call看 HTTP_MCP_SERVER.md 获取完整的HTTP API文档。
可用工具
1.你好
用可选的个性化消息问候用户。
参数:
name(可选):要问候的人的姓名
示例:
- 无名称:返回“Hello,World!欢迎使用MCP Hello World服务器!”
- 使用name:返回“Hello,\[name\]!欢迎使用MCP Hello World服务器!”
2.回声
回应您提供的信息。
参数:
message(必填):要回显的消息
例子:
- 输入:“测试消息”
- 输出:“回声:测试消息”
可用资源
1.服务器信息
提供服务器信息的静态资源。
URI: hello://server/info\ 类型: 文本/纯文本\ 内容: 服务器版本、功能和描述
2.个性化问候
生成个性化问候消息的动态资源。
URI模式: hello://greetings/{name}\ 类型: 文本/纯文本\ URI示例:
hello://greetings/Alice-问候爱丽丝hello://greetings/Bob-问候Bob
内容: 带有时间戳的个性化问候
项目结构
.
├── build.gradle.kts # Gradle build configuration
├── src/
│ └── main/
│ └── kotlin/
│ └── HelloWorldMcpServer.kt # Main MCP server implementation
└── README.md # This file关键组件
服务器设置
服务器配置了:
- 名字:hello world服务器
- 版本: 1.0.0
- 能力:
- 支持列表更改通知的工具 - 资源(静态和动态)
- 运输:STDIO(标准输入/输出)
- 安全:输入净化和验证(参见 安全.md)
代码亮点
// Creating the server
val server = Server(
serverInfo = Implementation(
name = "hello-world-server",
version = "1.0.0"
),
options = ServerOptions(
capabilities = ServerCapabilities(
tools = ServerCapabilities.Tools(listChanged = true)
)
)
) {
"A simple Hello World MCP server demonstrating tool capabilities"
}
// Adding a tool
server.addTool(
name = "hello",
description = "Returns a friendly greeting message...",
inputSchema = Tool.Input(
properties = buildJsonObject {
putJsonObject("name") {
put("type", "string")
put("description", "The name of the person to greet (optional)")
}
},
required = emptyList()
)
) { request ->
// Tool implementation
}依赖项
- Kotlin MCP SDK (0.7.7):核心MCP协议实现
- 哪个:HTTP客户端和服务器框架
- Kotlinx IO:Kotlin的现代IO原语
- Kotlinx序列化:JSON处理
安全
此服务器实现了输入净化,以防止常见漏洞:
- 控制字符过滤(换行符、制表符等)
- 防止DoS攻击的长度限制
- 空白修剪
- 消毒后验证
有关详细信息,请参阅 安全.md.
使用MCP客户端进行测试
要测试此服务器,您需要一个MCP客户端。你可以:
- 使用 MCP官方检查员
- 使用MCP Kotlin SDK构建自定义客户端
- 与支持MCP的LLM应用程序集成(如Claude Desktop)
更多资源
许可证
这个项目是开源的,可以在MIT许可证下使用。
此项目是使用创建的 Ktor项目生成器.
以下是一些帮助您入门的有用链接:
- Ktor文件
- 这 Ktor Slack聊天你需要
到 请求邀请 加入。
特性
以下是此项目中包含的功能列表:
| 名称 | 描述 |
|---|---|
| 路由 | 允许定义结构化路由和相关处理程序。 |
建筑与运营
要构建或运行项目,请使用以下任务之一:
| 任务 | 描述 |
|---|---|
./gradlew test | 运行测试 |
./gradlew build | 构建一切 |
./gradlew buildFatJar | 构建包含所有依赖项的服务器的可执行JAR |
./gradlew buildImage | 构建docker镜像以与胖JAR一起使用 |
./gradlew publishImageToLocalRegistry | 在本地发布docker镜像 |
./gradlew run | 运行服务器 |
./gradlew runDocker | 使用本地docker镜像运行 |
如果服务器成功启动,您将看到以下输出:
2024-12-04 14:32:45.584 [main] INFO Application - Application started in 0.303 seconds.
2024-12-04 14:32:45.682 [main] INFO Application - Responding at http://0.0.0.0:8080