今天我們來定義 Mcp server 有的基礎功能:
const server = new McpServer({
name: 'Journal MCP Server',
version: '1.0.0',
description: 'A MCP server for the Journal',
});
const journals = [];
server.tool(
'create_journal',
'Create a new journal',
{
content: z.string(),
date: z.string(),
},
async ({ content, date }) => {
journals.push({ content, date });
return { success: true };
},
);
server.tool('get_journals', 'Get all journals', {}, async () => {
return journals;
});
server.tool(
'read_journal',
'Read a journal entry by date',
{
date: z.string(),
},
async ({ date }) => {
return { entry: journals.find((journal) => journal.date === date) };
},
);
server.tool(
'search_journal',
'Search a journal entry by keyword',
{
keyword: z.string(),
},
async ({ keyword }) => {
const journal = journals.filter((journal) =>
journal.content.includes(keyword),
);
return journal;
},
);
可以直接複製貼上, 在我們正式用 client 把玩 Mcp Server 之前, 容我先介紹一個官方開發的檢視工具.
最後讓我們安裝一個用來 debug 用的套件,
它讓我們可以直接用 UI 的方式呼叫 server 的 methods、tools、resources,而不用自己手動組 JSON-RPC, 便於測試我們的 Mcp Server:
npm i -D @modelcontextprotocol/inspector
接著在 package.json 加上:
"server:inspect": "set DANGEROUSLY_OMIT_AUTH=true && npx @modelcontextprotocol/inspector npm run start"
note: DANGEROUSLY_OMIT_AUTH=true
會跳過驗證,讓 Inspector 可以直接連線到你的 server, 正式環境不要使用
執行
npm run server:inspect
會跳出網頁點進去會進到下面這個畫面, 你可以連線後試打一下剛建立的方法, 自己動手玩玩看吧: