(9/23 更新:調整安全機制流程理解,並同步更新更新圖片)
今天的心情,覺得自己踩了一個不該踩的坑
在 D6 的文章,我們已經知道可以透過在 MCP 工具描述塞入惡意指令 讓 LLM 執行危險的行為,那除了引入 MCP 工具前的初步安全篩選外,還可以建立更多的層次的安全機制。
下圖是模擬呼叫 MCP 工具的兩種流程,主要差異在於 MCP工具描述詞是否需要經過檢查
若是採取綠線的流程,即便 MCP Server 某天不幸被駭客短暫攻入,並添加了惡意描述,也能透過中介層的檢查機制阻止它,進一步避免 LLM 執行惡意內容。
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
import { spawn, ChildProcess } from "node:child_process";
const server = new McpServer({ name: "mcp-proxy-protect", version: "1.0.0" });
//定義 MCP Server 工具範例方法
server.registerTool("add",
{
title: "數字加總",
description: "把 a 與 b 相加後回傳結果(純計算、無副作用)",
inputSchema: {
a: z.number().describe("第一個數字").nullable(),
b: z.number().describe("第二個數字").nullable()
}
},
async (args: any) => {
const { a, b } = args as { a: number; b: number };
// 📋 先印出工具描述
console.error(`\n🧮 執行工具: add`);
console.error(`📝 描述: 把 a 與 b 相加後回傳結果(純計算、無副作用)`);
console.error(`🔧 參數:`, { a, b });
const result = a + b;
console.error(`✅ 計算結果: ${a} + ${b} = ${result}`);
return {
content: [
{ type: "text", text: "🧮 工具: 數字加總\n📝 描述: 把 a 與 b 相加後回傳結果(純計算、無副作用)" },
{ type: "text", text: String(result) }
]
};
}
);
這邊我是使用 Cursor 進行串接
為 IDE 追加防禦機制的這個情境,實際研究下來才發現要實作 mcp proxy server 才能實現,目前完成 mcp proxy server 的實作以及成功跟 agent 進行連線,但是卡關在 proxy server 取用其他 mcp server 的實作上 ,所以明天要繼續完成剩餘的部分。
那麼,明天見。
-- to be continued --
Connect Claude Code to tools via MCP