iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0
生成式 AI

MCP Server 全攻略:讓 AI 動態調用工具的工作流革命系列 第 8

[08] 從頭打造 Mcp Server -- (1) 專案介紹與初始化

  • 分享至 

  • xImage
  •  

專案介紹:日記程式

假設我們是一間剛成立的新創公司,目標是開發一個日記程式給一般社會大眾使用,我們會用 Node.js 來做,並且先不考慮使用者驗證跟資料庫的問題。

這是為了先從最小可行版本 (MVP) 開始,再逐步擴充:

今天 → 初始化專案,建立一個最基礎的 MCP Server

明天 → 加入 MCP Server 的基本 tools(例如 createJournal、getJournals)

後續 → 慢慢迭代,加入使用者驗證、甚至從 stdio 模式改成 HTTP server 模式(方便部署到線上)。

基本 tools

我們至少需要以下四個基本的 tools:

  • create_journal(content, date) → 新增一篇日記

  • get_journals(startDate, endDate) → 取得指定時間範圍的日記

  • read_journal(journalId) → 讀取單篇日記

  • searchJournal(text) → 直接從內容搜尋

也因為我們是面向一般使用者而非開發者, 我們會用 claude desktop而非 cursor 作為範例。

與傳統 API 開發流程的差異

  • 開發風格不同, 一個以 RESTFUL 為大宗, 一個用 FUNCTION 的概念
  • 可以只提供基本功能, 進階功能交由 LLM 實現, 舉例:
    • 資料下載功能:使用者想要分析一段時間的日記內容,公司必須開發匯出 API,提供日期範圍下載。
    • 分析功能: 若使用者希望 AI 幫忙分析日記內容,則公司還要再開發額外的分析 API,但 LLM 有你的回傳資料後是能夠自行為你做簡易分析的。
    • 社群轉發: 以後 LLM 可以像指揮家一樣調用不同服務的互動, 像是幫我把我今年的日記整理成年度回顧後寫成 blog 文章發到我的 medium, 日記公司不需要在額外開發功能來做這件複雜的事情。

專案初始化

創建一個空資料夾 → 命名為「journal-mcp-server」
  ↓
用你習慣的編輯器打開這個資料夾
  ↓
打開終端機 (Terminal)
  ↓
在專案資料夾中執行指令:
   npm init -y
  ↓
接著執行 npm install @modelcontextprotocol/sdk zod@3

@modelcontextprotocol/sdk 是方便我們創建 Mcp server 的套件,後者是用於驗證 request 格式的套件。

接著修改 package.json:

{
  "type": "module",
  "name": "journal-mcp-server",
  "version": "1.0.0",
  "main": "src/index.js",
  "scripts": {
    "start": "node src/index.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "description": "",
  "dependencies": {
    "@modelcontextprotocol/sdk": "^1.18.1",
    "zod": "^3.25.76"
  }
}

寫點小程式先建構好 STDIO Server 吧

Step 1:import 必要的套件

import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
  • McpServer → MCP server object,用它來定義 Server 的名稱、版本、可用工具。
  • StdioServerTransport → MCP 提供多種傳輸方式,這裡我們用 stdio (標準輸入/輸出) 來和 MCP Host ( Claude Desktop) 溝通。

Step 2:建立 MCP Server 實例

const server = new McpServer({
  name: 'Journal MCP Server',
  version: '1.0.0',
  description: 'A MCP server for the Journal',
  capabilities: {
    tools: {},
  },
});
  • capabilities → 定義這個 Server 有哪些功能,目前我們先放空的 tools,之後會加上 createJournal、getJournals 等。

Step 3:設定傳輸方式

我們先讓這個專案只能本機使用,所以先選 stdio 即可。不熟的朋友幫我去複習 [03] 如何讓 MCP Server 與 Client 溝通:STDIO 與 Streamable HTTP

async function main() {
  const transport = new StdioServerTransport();
  await server.connect(transport);
  console.error('Journal MCP Server is running on stdio');
}
  • 建立傳輸層 (transport) → 使用 StdioServerTransport()。

  • server.connect(transport) → 讓 MCP Server 透過 stdio 和外部 (MCP Host) 溝通。

-- 使用 console.error() → 在終端機輸出啟動訊息(MCP server 的 log 通常建議用 stderr,原因一樣可複習: [03] 如何讓 MCP Server 與 Client 溝通:STDIO 與 Streamable HTTP)。

Step 4:處理錯誤與啟動

main().catch((error) => {
  console.error(error);
  process.exit(1);
});

接著運行

npm run start

看到出現:

Journal MCP Server is running on stdio

就代表成功了,明天我們會開始實作 tools。

完整程式碼


上一篇
[07] MCP Server 的革命性影響:工作與生活的新模式
下一篇
[09] 實作 Mcp Server Tools & inspector 介紹
系列文
MCP Server 全攻略:讓 AI 動態調用工具的工作流革命12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言