Local Mcp Server Tutorial
好的,以下是一个创建本地 MCP 服务器(stdio)的教程: **创建本地 MCP 服务器 (stdio) 教程** **什么是 MCP?** MCP (Minecraft Coder Pack) 是一个用于反编译、反混淆和重新编译 Minecraft 代码的工具。它允许开发者更容易地理解和修改 Minecraft 的内部工作原理。 **什么是 stdio?** stdio (standard input/output) 是一种通信方式,允许程序通过标准输入和标准输出流进行交互。在这种情况下,本地 MCP 服务器将通过 stdio 与客户端进行通信。 **步骤:** **1. 安装 Java Development Kit (JDK)** 确保你的系统上安装了 Java Development Kit (JDK)。你需要 JDK 8 或更高版本。你可以从 Oracle 网站或你的发行版的包管理器下载并安装 JDK。 **2. 下载 MCP** 从 MCP 的官方网站或 GitHub 仓库下载最新版本的 MCP。 **3. 解压 MCP** 将下载的 MCP 压缩包解压到你选择的目录。 **4. 配置 MCP** * **`conf/mcp.cfg`:** 打开 `conf/mcp.cfg` 文件并根据你的需要进行配置。重要的配置项包括: * `MCP_LOC`: MCP 的根目录。 * `SRG_DIR`: SRG (Searge) 映射文件的目录。 * `BIN_DIR`: Minecraft 客户端和服务器 jar 文件的目录。 * `PATCHES_DIR`: 补丁文件的目录。 * `REOBF_PATCHES_DIR`: 反混淆补丁文件的目录。 * `DOCS_DIR`: 文档文件的目录。 * `VERSION`: Minecraft 的版本。 * **`conf/versions.cfg`:** 确保 `conf/versions.cfg` 文件包含你想要使用的 Minecraft 版本的配置。 **5. 获取 Minecraft 客户端和服务器 jar 文件** 你需要获取与你想要使用的 Minecraft 版本相对应的客户端和服务器 jar 文件。你可以从 Minecraft 启动器或 Minecraft 官方网站下载这些文件。将这些文件放置在 `jars/` 目录下。 **6. 反编译 Minecraft** 打开命令行终端,导航到 MCP 的根目录,并运行以下命令: ```bash ./decompile.sh ``` 或者,在 Windows 上: ```batch decompile.bat ``` 这将反编译 Minecraft 客户端和服务器代码。这个过程可能需要一些时间。 **7. 创建 stdio 服务器** 创建一个 Java 程序,该程序将作为本地 MCP 服务器运行。以下是一个简单的示例: ```java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; public class MCPStdioServer { public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); PrintWriter writer = new PrintWriter(System.out, true); String line; while ((line = reader.readLine()) != null) { // 在这里处理来自客户端的请求 // 例如,你可以执行 MCP 命令并返回结果 // 示例:将收到的消息回显给客户端 writer.println("Server received: " + line); } } } ``` **8. 编译 stdio 服务器** 使用 JDK 编译你的 Java 程序。 ```bash javac MCPStdioServer.java ``` **9. 运行 stdio 服务器** 运行编译后的 Java 程序。 ```bash java MCPStdioServer ``` **10. 创建客户端** 创建一个客户端程序,该程序将通过 stdio 与本地 MCP 服务器进行通信。你可以使用任何编程语言来创建客户端。 **11. 与服务器通信** 客户端程序需要通过标准输入向服务器发送请求,并通过标准输出接收响应。 **示例客户端 (Python):** ```python import sys def send_command(command): print(command, flush=True) # 发送命令并刷新输出 response = sys.stdin.readline().strip() # 读取服务器的响应 return response if __name__ == "__main__": response = send_command("Hello from client!") print("Server response:", response) response = send_command("Another command") print("Server response:", response) ``` **运行客户端:** ```bash python your_client.py ``` **重要提示:** * 你需要根据你的具体需求修改服务器和客户端代码。 * 你需要实现 MCP 命令的处理逻辑,以便服务器能够执行客户端请求的操作。 * 确保你的服务器和客户端使用相同的协议进行通信。 **总结:** 这个教程提供了一个创建本地 MCP 服务器 (stdio) 的基本框架。你需要根据你的具体需求进行修改和扩展。记住,理解 MCP 的工作原理以及 Minecraft 的代码结构对于成功创建本地 MCP 服务器至关重要。 希望这个教程对你有所帮助!
7nohe
README
本地 MCP 服务器教程
这是一个创建本地 MCP 服务器的教程。
准备工作
- Node.js(推荐 v22)
- Claude Desktop 或其他 MCP 客户端
教程
1. 创建项目
npx giget@latest gh:7nohe/local-mcp-server-tutorial my-mcp-server
cd my-mcp-server
npm install
git init
git branch -M main
git add .
git commit -m "Initial commit"
2. 构建并运行 TypeScript 代码
尝试构建并运行以下 src/index.ts 中的内容,使其成为可执行文件。
#!/usr/bin/env node
async function main() {
console.error("Hello, world!");
}
main().catch((error) => {
console.error("Fatal error in main():", error);
process.exit(1);
});
npm run build
./dist/index.js
# Hello, world!
[!NOTE] 通过 package.json 的 bin 属性设置,将在 node_modules/.bin/ 下创建符号链接,从而可以执行 ./dist/index.js。
3. 安装必要的库
npm install @modelcontextprotocol/sdk zod
4. 实现 MCP 服务器
#!/usr/bin/env node
import { McpServer, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
// 创建 MCP 服务器的实例。
const server = new McpServer({
name: "my-mcp-server",
version: "1.0.0",
capabilities: {
resources: {},
tools: {},
},
});
async function main() {
const transport = new StdioServerTransport();
// Resources
// 定义一个返回 "Hello, world!" 的 Resource。
server.resource(
"Greeting",
"greeting://hello",
(uri, { }) => {
console.log(uri)
return {
contents: [
{
uri: uri.href,
text: "Hello, world!",
}
]
}
})
// 对于动态 Resource,使用 ResourceTemplate 类。
// list 选项是用于列出与此模板匹配的所有 Resources 的回调。如果使用 ResourceTemplate,则必须指定为 undefined。
server.resource(
"Greeting with name",
new ResourceTemplate("greeting://hello/{name}", {
// list
list: async () => {
// 例如,您可以在此处调用 API 以获取用户列表。
await setTimeout(() => { }, 1000);
// 在这里返回虚拟数据。
return {
resources:
[
{ name: "Alice", uri: "greeting://hello/Alice" },
{ name: "Bob", uri: "greeting://hello/Bob" },
{ name: "Charlie", uri: "greeting://hello/Charlie" },
]
}
},
}),
(uri, { name }) => {
return {
contents: [
{
uri: uri.href,
text: `Hello, ${name}!`,
}
]
}
})
// Prompts
server.prompt(
"Japanese Translation",
{
englishText: z.string().describe("翻译する英語のテキスト"),
},
({ englishText }) => ({
messages: [{
role: 'user',
content: {
type: 'text',
text: `あなたはプロの翻訳者です。次のテキストを日本語に翻訳してください: ${englishText}`,
}
}]
}));
// Tools
server.tool(
"calculate-bmi",
"BMIの計算を行います",
{
weightKg: z.number().describe("体重(kg)"),
heightM: z.number().describe("身長(m)"),
},
({ weightKg, heightM }) => {
return {
content: [
{
type: "text",
text: String(weightKg / (heightM * heightM)),
}
]
}
})
server.connect(transport);
console.error("my-mcp-server started");
}
main().catch((error) => {
console.error("Fatal error in main():", error);
process.exit(1);
});
5. 调试
使用 Inspector 进行调试。
npx @modelcontextprotocol/inspector ./dist/index.js
在浏览器中打开 http://127.0.0.1:6274,您可以检查定义的 Resources 和 Tools 的响应。
[!NOTE] 如果每次都输入构建命令很麻烦,可以运行
npm run watch
,它会在每次更改时自动构建。
接下来,在 Claude Desktop 中进行操作确认。 从 Settings -> Developer -> Edit Config 在编辑器中打开 claude_desktop_config.json,并进行如下设置:
{
"mcpServers": {
"my-mcp-server": {
"command": "/<Projectまでの絶対パス>/my-mcp-server/dist/index.js"
}
}
}
保存后,重新启动 Claude Desktop。
如果可以从 Tools 按钮确认列表,并且可以从 Attach from MCP 按钮选择 Resource 和 Prompt,则表示成功。
6. 发布包
npm login
npm publish
[!NOTE] 在 npm publish 时,通过将 package.json 的 name 设置为 @username/my-mcp-server 之类的名称,可以更容易地识别您创建的包。
[!WARNING] npm 包一旦发布就很难删除,因此请谨慎发布。
要点:
- 在 package.json 的 scripts.prepublishOnly 中设置构建,以便在 npm publish 时自动构建。
- 在 package.json 的 bin 属性中进行如下设置,使其可以作为 CLI 执行。
"bin": "./dist/index.js"
- 在 package.json 的 files 属性中进行如下设置,以便仅发布 dist 文件夹。
"files": [
"dist"
]
7. 运行已发布的 MCP 服务器
将 Claude Desktop 的设置更改如下:
"my-mcp-server": {
"command": "npx",
"args": [
"@your-name/my-mcp-server@latest"
]
}
推荐服务器
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
MCP Package Docs Server
促进大型语言模型高效访问和获取 Go、Python 和 NPM 包的结构化文档,通过多语言支持和性能优化来增强软件开发。
Claude Code MCP
一个实现了 Claude Code 作为模型上下文协议(Model Context Protocol, MCP)服务器的方案,它可以通过标准化的 MCP 接口来使用 Claude 的软件工程能力(代码生成、编辑、审查和文件操作)。
@kazuph/mcp-taskmanager
用于任务管理的模型上下文协议服务器。它允许 Claude Desktop(或任何 MCP 客户端)在基于队列的系统中管理和执行任务。
mermaid-mcp-server
一个模型上下文协议 (MCP) 服务器,用于将 Mermaid 图表转换为 PNG 图像。
Jira-Context-MCP
MCP 服务器向 AI 编码助手(如 Cursor)提供 Jira 工单信息。

Linear MCP Server
一个模型上下文协议(Model Context Protocol)服务器,它与 Linear 的问题跟踪系统集成,允许大型语言模型(LLM)通过自然语言交互来创建、更新、搜索和评论 Linear 问题。

Sequential Thinking MCP Server
这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。
Curri MCP Server
通过管理文本笔记、提供笔记创建工具以及使用结构化提示生成摘要,从而实现与 Curri API 的交互。