Skip to content

Commit 733f104

Browse files
authored
Merge pull request #1857 from ModelEngine-Group/bsm-doc-mcp-development
2 parents 88ced66 + 5cd9d1e commit 733f104

File tree

8 files changed

+414
-2438
lines changed

8 files changed

+414
-2438
lines changed

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
.idea
2-
.gitignore
32
/.env
43
.vscode
54

doc/.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
node_modules/
2+
pnpm-lock.yaml
3+
package-lock.json
4+
docs/.vitepress/cache
5+
docs/.vitepress/dist

doc/docs/.vitepress/config.mts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,10 @@ export default defineConfig({
163163
text: "MCP Ecosystem",
164164
items: [
165165
{ text: "Overview", link: "/en/mcp-ecosystem/overview" },
166+
{
167+
text: "MCP Server Development",
168+
link: "/en/mcp-ecosystem/mcp-server-development",
169+
},
166170
{ text: "Use Cases", link: "/en/mcp-ecosystem/use-cases" },
167171
],
168172
},
@@ -326,6 +330,10 @@ export default defineConfig({
326330
text: "MCP 生态系统",
327331
items: [
328332
{ text: "概览", link: "/zh/mcp-ecosystem/overview" },
333+
{
334+
text: "MCP 服务开发",
335+
link: "/zh/mcp-ecosystem/mcp-server-development",
336+
},
329337
{ text: "用例场景", link: "/zh/mcp-ecosystem/use-cases" },
330338
],
331339
},
Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
1+
# MCP Server Development Guide
2+
3+
This guide walks you through building your own MCP server with Python and the FastMCP framework, then connecting it to the Nexent platform.
4+
5+
## 🌐 Language Support
6+
7+
The MCP protocol provides SDKs for multiple programming languages:
8+
9+
- **Python** ⭐ (recommended)
10+
- **TypeScript**
11+
- **Java**
12+
- **Go**
13+
- **Rust**
14+
- Any other language that implements the MCP protocol
15+
16+
### Why Do We Recommend Python?
17+
18+
We use **Python** for the examples in this guide because it offers:
19+
20+
-**Beginner-friendly syntax**: concise code that is easy to read
21+
-**Rich ecosystem**: frameworks like FastMCP remove most boilerplate
22+
-**Rapid prototyping**: you can stand up a working server in minutes
23+
-**Mature libraries**: thousands of third-party packages are available
24+
25+
If you are already comfortable in another language, feel free to use the corresponding MCP SDK. For a first MCP server, however, Python gives you the smoothest experience.
26+
27+
## 📋 Prerequisites
28+
29+
Install FastMCP before you start coding:
30+
31+
```bash
32+
pip install fastmcp
33+
```
34+
35+
## 🚀 Quick Start
36+
37+
### Minimal Example
38+
39+
The snippet below creates a simple string utility server with FastMCP:
40+
41+
```python
42+
from fastmcp import FastMCP
43+
44+
# Create an MCP server instance
45+
mcp = FastMCP(name="String MCP Server")
46+
47+
@mcp.tool(
48+
name="calculate_string_length",
49+
description="Calculate the length of a string"
50+
)
51+
def calculate_string_length(text: str) -> int:
52+
return len(text)
53+
54+
@mcp.tool(
55+
name="to_uppercase",
56+
description="Convert text to uppercase"
57+
)
58+
def to_uppercase(text: str) -> str:
59+
return text.upper()
60+
61+
@mcp.tool(
62+
name="to_lowercase",
63+
description="Convert text to lowercase"
64+
)
65+
def to_lowercase(text: str) -> str:
66+
return text.lower()
67+
68+
if __name__ == "__main__":
69+
# Start with SSE transport
70+
mcp.run(transport="sse", port=8000)
71+
```
72+
73+
### Run the Server
74+
75+
Save the code as `mcp_server.py` and execute:
76+
77+
```bash
78+
python mcp_server.py
79+
```
80+
81+
You should see the server start successfully with the endpoint `http://127.0.0.1:8000/sse`.
82+
83+
## 🔌 Integrate MCP Services with Nexent
84+
85+
Once your MCP server is up, connect it to Nexent:
86+
87+
### Step 1: Start the MCP Server
88+
89+
Keep the server process running and note the public endpoint (for example `http://127.0.0.1:8000/sse`).
90+
91+
### Step 2: Register the MCP Service in Nexent
92+
93+
1. Open the **[Agent Development](../user-guide/agent-development.md)** page.
94+
2. On the “Select Agent Tools” tab, click **MCP Configuration** on the right.
95+
3. Enter the server name and server URL.
96+
- ⚠️ **Important**:
97+
1. The server name must contain only letters and digits—no spaces or other symbols.
98+
2. When Nexent runs inside Docker and the MCP server runs on the host, replace `127.0.0.1` with `host.docker.internal`, for example `http://host.docker.internal:8000`.
99+
4. Click **Add** to finish the registration.
100+
101+
### Step 3: Use the MCP Tool
102+
103+
During agent creation or editing, the newly registered MCP tool appears in the tool list and can be attached to any agent.
104+
105+
## 🔧 Wrap Existing Workloads
106+
107+
To expose existing business logic as MCP tools, call your internal APIs or libraries inside the tool functions.
108+
109+
### Example: Wrap a REST API
110+
111+
```python
112+
from fastmcp import FastMCP
113+
import requests
114+
115+
# Create an MCP server instance
116+
mcp = FastMCP("Course Statistics Server")
117+
118+
@mcp.tool(
119+
name="get_course_statistics",
120+
description="Get course statistics such as average, max, min, and total students"
121+
)
122+
def get_course_statistics(course_id: str) -> str:
123+
api_url = "https://your-school-api.com/api/courses/statistics"
124+
response = requests.get(api_url, params={"course_id": course_id})
125+
126+
if response.status_code == 200:
127+
data = response.json()
128+
stats = data.get("statistics", {})
129+
return (
130+
f"Course {course_id} statistics:\n"
131+
f"Average: {stats.get('average', 'N/A')}\n"
132+
f"Max: {stats.get('max', 'N/A')}\n"
133+
f"Min: {stats.get('min', 'N/A')}\n"
134+
f"Total Students: {stats.get('total_students', 'N/A')}"
135+
)
136+
return f"API request failed: {response.status_code}"
137+
138+
if __name__ == "__main__":
139+
# Start with SSE transport
140+
mcp.run(transport="sse", port=8000)
141+
```
142+
143+
### Example: Wrap an Internal Module
144+
145+
```python
146+
from fastmcp import FastMCP
147+
from your_school_module import query_course_statistics
148+
149+
# Create an MCP server instance
150+
mcp = FastMCP("Course Statistics Server")
151+
152+
@mcp.tool(
153+
name="get_course_statistics",
154+
description="Get course statistics such as average, max, min, and total students"
155+
)
156+
def get_course_statistics(course_id: str) -> str:
157+
try:
158+
stats = query_course_statistics(course_id)
159+
return (
160+
f"Course {course_id} statistics:\n"
161+
f"Average: {stats.get('average', 'N/A')}\n"
162+
f"Max: {stats.get('max', 'N/A')}\n"
163+
f"Min: {stats.get('min', 'N/A')}\n"
164+
f"Total Students: {stats.get('total_students', 'N/A')}"
165+
)
166+
except Exception as exc:
167+
return f"Failed to query statistics: {exc}"
168+
169+
if __name__ == "__main__":
170+
# Start with SSE transport
171+
mcp.run(transport="sse", port=8000)
172+
```
173+
174+
## 📚 Additional Resources
175+
176+
### Python
177+
178+
- [FastMCP Documentation](https://github.com/modelcontextprotocol/python-sdk) (used throughout this guide)
179+
180+
### Other Languages
181+
182+
- [MCP TypeScript SDK](https://github.com/modelcontextprotocol/typescript-sdk)
183+
- [MCP Java SDK](https://github.com/modelcontextprotocol/java-sdk)
184+
- [MCP Go SDK](https://github.com/modelcontextprotocol/go-sdk)
185+
- [MCP Rust SDK](https://github.com/modelcontextprotocol/rust-sdk)
186+
187+
### General References
188+
189+
- [MCP Protocol Specification](https://modelcontextprotocol.io/)
190+
- [Nexent Agent Development Guide](../user-guide/agent-development.md)
191+
- [MCP Tool Ecosystem Overview](./overview.md)
192+
193+
## 🆘 Need Help?
194+
195+
If you run into issues while developing MCP servers:
196+
197+
1. Check the **[FAQ](../getting-started/faq.md)**
198+
2. Ask questions in [GitHub Discussions](https://github.com/ModelEngine-Group/nexent/discussions)
199+
3. Review sample servers on the [ModelScope MCP Marketplace](https://www.modelscope.cn/mcp)
200+

doc/docs/en/user-guide/agent-development.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,15 @@ Nexent allows you to quickly use third-party MCP tools to enrich agent capabilit
5858

5959
1. On the "Select Tools" tab, click "MCP Config" to configure MCP servers in the popup and view configured servers
6060
2. Enter the server name and URL (currently only SSE protocol is supported)
61+
- ⚠️ **Note:** The server name must contain only English letters or digits; spaces, underscores, and other characters are not allowed.
6162
3. Click "Add" to complete the addition
6263

6364
<div style="display: flex; justify-content: left;">
6465
<img src="./assets/agent/mcp.png" style="width: 80%; height: auto;" />
6566
</div>
6667

6768
Many third-party services such as [ModelScope](https://www.modelscope.cn/mcp) provide MCP services, which you can quickly integrate and use.
69+
You can also develop your own MCP services and connect them to Nexent; see [MCP Server Development](../mcp-ecosystem/mcp-server-development.md).
6870

6971
### Custom Tools
7072

0 commit comments

Comments
 (0)