Skip to content

Commit 9ced467

Browse files
authored
Merge pull request #8 from weishuai8888/main
完善服务开发者快速入门指南
2 parents bcda962 + f67e409 commit 9ced467

File tree

9 files changed

+2327
-67
lines changed

9 files changed

+2327
-67
lines changed

content/docs/(get-started)/quick-start/server-developers.mdx

Lines changed: 1747 additions & 67 deletions
Large diffs are not rendered by default.
Lines changed: 249 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,249 @@
1+
---
2+
title: 服务器开发者
3+
description: 快速开始 - 服务器开发者
4+
---
5+
6+
开始构建自己的服务器,以便在Claude中用于Desktop和其他客户端。
7+
8+
在本教程中,我们将构建一个简单的MCP天气服务器,并将其连接到主机Claude for Desktop。我们将从基本设置开始,然后进行更复杂的用例。
9+
10+
## 我们将要干什么
11+
许多LLM(包括Claude)目前无法获取预报和恶劣天气警报。让我们用MCP解决这个问题。
12+
13+
我们将构建一个server,该server提供两个工具:get-alerts and get-forecast。然后,我们将服务器连接到MCP主机(在本例中使用Claude for Desktop):
14+
![ImaImageZoomge](/server-developers-01.png)
15+
![ImaImageZoomge](/server-developers-02.png)
16+
17+
18+
服务可以连接任何客户端。为了简单起见,我们在这里选择了Claude作为桌面,但我们也有关于[建立自己的client](https://mcp.thinkinai.xyz/docs/quick-start/client-developers)建立自己的client的指南,以及[这里的其他客户列表](https://mcp.thinkinai.xyz/docs/example-clients)。
19+
20+
21+
```
22+
为什么选择Claude for DeskTop而不是Claude.ai?
23+
由于服务器是本地运行的,MCP目前只支持桌面主机。远程主机正在积极开发中。
24+
```
25+
26+
## MCP核心概念
27+
MCP服务器可以提供三种主要功能:
28+
1. **Resources**:客户端可以读取的类文件数据(如API响应或文件内容)
29+
2. **Tools**:LLM可以调用的函数(经用户批准)
30+
3. **Prompts**:帮助用户完成特定任务的预先编写的模板
31+
本教程将主要关注工具。
32+
33+
### 基于Java
34+
这是一个基于Spring AI MCP自动配置和引导启动器的快速入门演示。要了解如何手动创建同步和异步MCP服务器,请参阅[Java SDK服务器](https://modelcontextprotocol.io/sdk/java/mcp-server)文档。
35+
36+
让我们开始构建一个天气服务![你可以在这里找到我们将要构建的完整代码](https://github.com/spring-projects/spring-ai-examples/tree/main/model-context-protocol/weather/starter-stdio-server)【MCP官方代码,支持查询美国天气情况】。
37+
[这里的代码也可以](https://github.com/weishuai8888/spring-ai-examples)【fork官方代码后调整了逻辑,支持查询全世界的天气情况】
38+
39+
有关更多信息,请参阅[MCP Server Boot Starter](https://docs.spring.io/spring-ai/reference/api/mcp/mcp-server-boot-starter-docs.html)参考文档。有关手动MCP服务器实现,请参阅[MCP Server Java SDK文档](https://modelcontextprotocol.io/sdk/java/mcp-server)。
40+
41+
#### 系统要求
42+
~
43+
● 已安装Java 17或更高版本
44+
● [Spring Boot 3.3.x](https://docs.spring.io/spring-boot/installing.html) 或更高版本
45+
46+
#### 设置你的环境变量
47+
使用 [Spring Initizer](https://start.spring.io) 启动项目。
48+
49+
你需要添加以下的依赖项:
50+
51+
import { Tab, Tabs } from 'fumadocs-ui/components/tabs';
52+
53+
<Tabs items={['Maven', 'Gradle']}>
54+
<Tab value="Maven">
55+
```xml
56+
<dependencies>
57+
<dependency>
58+
<groupId>org.springframework.ai</groupId>
59+
<artifactId>spring-ai-starter-mcp-server</artifactId>
60+
</dependency>
61+
62+
<dependency>
63+
<groupId>org.springframework</groupId>
64+
<artifactId>spring-web</artifactId>
65+
</dependency>
66+
</dependencies>
67+
```
68+
</Tab>
69+
<Tab value='Gradle'>
70+
```xml
71+
dependencies {
72+
implementation platform("org.springframework.ai:spring-ai-starter-mcp-server")
73+
implementation platform("org.springframework:spring-web")
74+
}
75+
```
76+
</Tab>
77+
</Tabs>
78+
79+
然后通过设置应用程序属性来配置应用程序
80+
81+
<Tabs items={['application.yml', 'application.properties']}>
82+
<Tab value="application.yml">
83+
```yaml
84+
logging:
85+
pattern:
86+
console:
87+
spring:
88+
main:
89+
banner-mode: off
90+
```
91+
</Tab>
92+
<Tab value="application.properties">
93+
```properties
94+
logging.pattern.console=
95+
spring.main.banner-mode=off
96+
```
97+
</Tab>
98+
</Tabs>
99+
100+
[服务器配置属性](https://docs.spring.io/spring-ai/reference/api/mcp/mcp-server-boot-starter-docs.html#_configuration_properties)记录了所有可用的属性。现在,让我们开始构建您的服务器。
101+
102+
# 构建你的服务器
103+
## 天气服务
104+
让我们实现一个WeatherService.java,它使用 REST 客户端从国家气象局 API 查询数据:
105+
``` java
106+
@Service
107+
public class WeatherService {
108+
109+
private final RestClient restClient;
110+
111+
public WeatherService() {
112+
this.restClient = RestClient.builder()
113+
.baseUrl("https://api.weather.gov")
114+
.defaultHeader("Accept", "application/geo+json")
115+
.defaultHeader("User-Agent", "WeatherApiClient/1.0 ([email protected])")
116+
.build();
117+
}
118+
119+
@Tool(description = "Get weather forecast for a specific latitude/longitude")
120+
public String getWeatherForecastByLocation(
121+
double latitude, // Latitude coordinate
122+
double longitude // Longitude coordinate
123+
) {
124+
// Returns detailed forecast including:
125+
// - Temperature and unit
126+
// - Wind speed and direction
127+
// - Detailed forecast description
128+
}
129+
130+
@Tool(description = "Get weather alerts for a US state")
131+
public String getAlerts(
132+
@ToolParam(description = "Two-letter US state code (e.g. CA, NY)" String state
133+
) {
134+
// Returns active alerts including:
135+
// - Event type
136+
// - Affected area
137+
// - Severity
138+
// - Description
139+
// - Safety instructions
140+
}
141+
142+
// ......
143+
}
144+
```
145+
该@Service注释会自动在应用程序上下文中注册服务。Spring AI@Tool注释使创建和维护 MCP 工具变得容易。
146+
147+
自动配置将自动向 MCP 服务器注册这些工具。
148+
149+
## 创建启动应用程序
150+
``` java
151+
@SpringBootApplication
152+
public class McpServerApplication {
153+
154+
public static void main(String[] args) {
155+
SpringApplication.run(McpServerApplication.class, args);
156+
}
157+
158+
@Bean
159+
public ToolCallbackProvider weatherTools(WeatherService weatherService) {
160+
return MethodToolCallbackProvider.builder().toolObjects(weatherService).build();
161+
}
162+
}
163+
```
164+
使用实用MethodToolCallbackProvider程序将其转换@Tools为 MCP 服务器使用的可操作回调。
165+
166+
## 运行服务器
167+
最后,让我们构建服务器:
168+
```bash
169+
./mvnw clean install
170+
```
171+
这将在文件夹mcp-weather-stdio-server-0.0.1-SNAPSHOT.jar中生成一个文件target。
172+
173+
现在让我们从现有的 MCP 主机 Claude for Desktop 测试您的服务器。
174+
175+
# 使用 Claude for Desktop 测试你的服务器
176+
Claude for Desktop 尚未在 Linux 上提供。
177+
178+
首先,请确保您已安装 Claude for Desktop。 [您可以在此处安装最新版本](https://www.anthropic.com/app-unavailable-in-region)。如果您已经安装了 Claude for Desktop,[请确保它已更新到最新版本](https://www.anthropic.com/app-unavailable-in-region)。
179+
180+
我们需要为您想要使用的 MCP 服务器配置 Claude for Desktop。为此,请在~/Library/Application Support/Claude/claude_desktop_config.json文本编辑器中打开您的 Claude for Desktop App 配置。如果该文件不存在,请务必创建。
181+
182+
例如,如果你安装了VS Code:
183+
184+
<Tabs items={['MacOS/Linux', '视窗']}>
185+
<Tab value="MacOS/Linux">
186+
```shell
187+
code ~/Library/Application\ Support/Claude/claude_desktop_config.json
188+
```
189+
</Tab>
190+
<Tab value="视窗">
191+
```bash
192+
code $env:AppData\Claude\claude_desktop_config.json
193+
```
194+
</Tab>
195+
</Tabs>
196+
197+
然后您将在密钥中添加服务器mcpServers。只有至少一台服务器配置正确,MCP UI 元素才会显示在 Claude for Desktop 中。
198+
199+
在这种情况下,我们将像这样添加单个天气服务器:
200+
<Tabs items={['MacOS/Linux', '视窗']}>
201+
<Tab value="MacOS/Linux">
202+
```java
203+
{
204+
"mcpServers": {
205+
"spring-ai-mcp-weather": {
206+
"command": "java",
207+
"args": [
208+
"-Dspring.ai.mcp.server.stdio=true",
209+
"-jar",
210+
"/ABSOLUTE/PATH/TO/PARENT/FOLDER/mcp-weather-stdio-server-0.0.1-SNAPSHOT.jar"
211+
]
212+
}
213+
}
214+
}
215+
```
216+
</Tab>
217+
<Tab value="视窗">
218+
```bash
219+
{
220+
"mcpServers": {
221+
"spring-ai-mcp-weather": {
222+
"command": "java",
223+
"args": [
224+
"-Dspring.ai.mcp.server.transport=STDIO",
225+
"-jar",
226+
"C:\\ABSOLUTE\\PATH\\TO\\PARENT\\FOLDER\\weather\\mcp-weather-stdio-server-0.0.1-SNAPSHOT.jar"
227+
]
228+
}
229+
}
230+
}
231+
```
232+
</Tab>
233+
</Tabs>
234+
确保传递了服务器的绝对路径。
235+
236+
这告诉 Claude for Desktop:
237+
238+
1. 有一个名为“my-weather-server”的 MCP 服务器
239+
2. 通过运行来启动它java -jar /ABSOLUTE/PATH/TO/PARENT/FOLDER/mcp-weather-stdio-server-0.0.1-SNAPSHOT.jar
240+
241+
保存文件并重新启动Claude for Desktop。
242+
243+
244+
245+
246+
247+
248+
249+

0 commit comments

Comments
 (0)