MCPå ¥é
æ¬èšäºã¯ãæè¿è©±é¡ã®MCPã®å
¥éèšäºã§ãã
MCPïŒModel Context ProtocolïŒã«ã€ããŠã以äžã®4ã¹ãããã§ç޹ä»ããŸãã
- ãã£ããçè§£ãã
- 䜿ã£ãŠã¿ã
- æ·±ãçè§£ãã
- äœã£ãŠã¿ã
åå¿è ã§ãé çªã«èªã¿é²ããã°ãMCPã«ã€ããŠãã£ãšçè§£ããããããªå®è£ ãã§ããããã«ãªãããšãç®æããŸãðª
ãã£ããçè§£ãã
MCPãšã¯ããã£ããèšããšãLLMã¢ããªãšå€éšãµãŒãã¹ã飿ºããããã®çµ±äžãããã€ã³ã¿ãŒãã§ãŒã¹(ãããã³ã«)ã§ãã

LLMã¢ããªãšã¯ãChatGPTãClaudeãCursorãªã©ãLLMã䜿çšããããã¢ããªã±ãŒã·ã§ã³ãæããŸãã(â ïžÂ GPT-4oãclaude-3-5-sonnetãªã©ã®LLMèªäœãšã¯åºå¥ããŠãã ããã)
åæã®LLMã¢ããªã¯ãã©ããŸã§ãã£ãŠããããè³¢ããã£ããããŒã«ã§ãããªããçµå±ã¯ããã¹ããè¿çããããšããã§ããŸããã§ããã
ãã®ãããLLMã¢ããªã®è¿çã«å¯ŸããŠäœããããã¯äººéã倿ããå¿ èŠããããŸããã

ãã®åé¡ãæåã«è§£æ±ºããã®ããOpenAIã®Function Callingã§ãã
Function Callingã䜿çšããããšã§ãLLMã«ã©ã®ãããªã¢ã¯ã·ã§ã³ãè¡ãã倿ããããããšå ±ã«ãæå®ããJSONã¬ã¹ãã³ã¹ã䜿ã£ãŠãLLMã¢ããªãçŽæ¥ã¢ã¯ã·ã§ã³ãå®è¡ã§ããããã«ãªããŸããã

ããããLLMã¢ããªåŽãç¡æ°ã«ããå€éšãµãŒãã¹ã«å¯ŸããŠããã¡ãã¡é£æºãå®è£
ããã«ã¯éçããããŸãããæ°ãããµãŒãã¹ãåºãŠãã床ã«è¿œå ã®å¯Ÿå¿ãå¿
èŠã«ãªã£ãŠããŸããŸãã

ããã§ãç»å Žããã®ãLLMã¢ããªãšå€éšãµãŒãã¹ã飿ºããããã®çµ±äžãããã€ã³ã¿ãŒãã§ãŒã¹(ãããã³ã«)ãMCPã§ãã
å€éšãµãŒãã¹ã®ãããã€ããŒ(ãããã¯ç¬¬äžè
)ããMCPãµãŒããŒ(åŸã§è©³ãã説æããŸã)ãæäŸããããšã§ãåLLMã¢ããªã¯ãäœããããšãçµ±äžãããã€ã³ã¿ãŒãã§ãŒã¹ã§å€éšãµãŒãã¹ãå©çšã§ããããã«ãªãããã§ãð

䜿ã£ãŠã¿ã
ç¿ããããæ £ããïŒãŸãã¯MCPã䜿ã£ãŠã¿ãŸããã âš
ããã§ã¯ãå ¬åŒããã¥ã¡ã³ããšåæ§ãFilesystem MCP Serverã詊ããŠã¿ãŸãããã(â»ãMCPãµãŒããŒããªã©åããŠåºãŠããçšèªããããŸãããããšã§äžå¯§ã«èª¬æããŸããä»ã¯ãªããšãªãèªã¿é²ããŠOKã§ãïŒ)
Claudeã®ãã¹ã¯ãããã¢ããªãå¿ èŠã«ãªãã®ã§ããªãæ¹ã¯ã€ã³ã¹ããŒã«ããé¡ãããŸã ððŒ
MCPãµãŒããŒã®ç»é²
ãŸããFilesystem MCP ServerãClaudeã«ç»é²ããŸãã
-
ã¢ããªã®ã¡ãã¥ãŒããŒ
Claude>èšå®ãéã -
ã¯ããããéžæã

以äžã®ãã¹ã§ç©ºã®èšå®ãã¡ã€ã«ãäœæãããŸãã
⢠macOSã®å Žå:Â~/Library/Application\ Support/Claude/claude_desktop_config.json
⢠Windowsã®å Žå:Â%APPDATA%\Claude\claude_desktop_config.json -
äœæãããèšå®ãã¡ã€ã«ã«ä»¥äžã®jsonãèšè¿°ããŸãã
{username}ã¯ãèªèº«ã®PCäžã®ãŠãŒã¶ãŒåã«æžãæããŠãã ããã{ "mcpServers": { "filesystem": { "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-filesystem", "/Users/{username}/Downloads" // TODO: usernameãæžãæããŠãã ããã ] } } } -
ããã§æºåå®äºã§ãâ  Claudeãåèµ·åããŠã¿ãŸããããããŸãããã°ãðšã®ã¢ã€ã³ã³ãã衚瀺ãããå©çšã§ããæ©èœçŸ€ã衚瀺ãããŸãã


-
åäœã®ç¢ºèªãããŠã¿ãŸãããïŒãæè¿ããŠã³ããŒãããããã¡ã€ã«ã衚瀺ããŠããšèããŠã¿ãŸããããããšã³ãã³ãã®äœ¿çšèš±å¯ã®ã¢ãŒãã«ã衚瀺ãããã®ã§ãèš±å¯ãã¡ãããŸãã

ç¡äºãããŒã«ã«ã®PCããããŠã³ããŒãããããã¡ã€ã«ãæããŠãããŸãã ððŒ

ããæ·±ãçè§£ãã
å®éã«äœ¿ã£ãŠã¿ãŠãã€ã¡ãŒãžãæ¹§ãããšããã§ãMCPã®ä»çµã¿ãããæ·±æãããŠã¿ãŸãããã
ã³ã³ããŒãã³ã
MCPã§ã¯ãäž»ã«5ã€ã®ã³ã³ããŒãã³ããåºãŠããŸãã
| çšèª | 説æ |
|---|---|
| LLMã¢ã㪠| ChatGPTãClaudeãCursorãªã©ãLLMã䜿çšããããã®ã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããã¢ããªã±ãŒã·ã§ã³ãæããŸããLLMèªäœãšã¯åºå¥ããŠãã ãããå ¬åŒããã¥ã¡ã³ãã§ã¯ãLLMãã¹ããšåŒã°ããŠããŸãã |
| LLM | LLMã¢ããªãå©çšããLLMã¢ãã«ãå€ãã®å Žåã¯ãAPIçµç±ã§ãªã¢ãŒãã®ãã®ãå©çšããŸãã |
| MCPã¯ã©ã€ã¢ã³ã | MCPãµãŒããŒãšMCPã«åŸã£ãŠéä¿¡ããã¯ã©ã€ã¢ã³ããLLMã¢ããªå ã«ãMCPãµãŒããŒããšã«1:1ã§è€æ°ååšããŸãã |
| MCPãµãŒã㌠| MCPã¯ã©ã€ã¢ã³ããšå€éšãµãŒãã¹ã®æ©æž¡ããè¡ã軜éãµãŒããŒãLLMã¢ããªã®ããã®BFFãšèãããšããããããããµãŒããŒãšããååã ããLLMã¢ããªãšåããããŒã«ã«ãã·ã³äžã«ç«ãŠãããããšã«æ³šæããŠãã ãããåãµãŒãã¹ã¯MCPã«åŸã£ãŠãMCPãµãŒããŒãå®è£ ããããšã§LLMã¢ããªãšã®é£æºãå¯èœã«ããŸãã |
| å€éšãµãŒãã¹ | PCäžã®ãã¡ã€ã«ã·ã¹ãã ãGooleã«ã¬ã³ããŒã®äºå®ãGithubãé£ã¹ãã°ãSlackãªã©æ§ã ãªãµãŒãã¹ãæããŸããå€éšãµãŒãã¹ã¯ããã¡ã€ã«ã·ã¹ãã ãªã©ã®ããŒã«ã«ã«ååšããå ŽåãšãGithubãSlackãªã©ãªã¢ãŒãã«ååšããå ŽåããããŸãã |

MCPãšã¯ããæ£ç¢ºã«ã¯MCPã¯ã©ã€ã¢ã³ããšMCPãµãŒããŒã®éä¿¡æ¹åŒãå®ãããããã³ã«ãªã®ã§ãã
MCPã®åäœã®æµã
ãããã®ã³ã³ããŒãã³ãããã©ã®ããã«é£æºããŠãã¢ã¯ã·ã§ã³ãå®è¡ãããã®ããå ã»ã©ã®ãã¡ã€ã«ã·ã¹ãã MCPãµãŒããŒãäŸã«æŽçããŸãã
-
LLMã¢ããªèµ·åæã«ããã¡ã€ã«ã·ã¹ãã å°çšã®MCPã¯ã©ã€ã¢ã³ããšãã¡ã€ã«ã·ã¹ãã å°çšã®MCPãµãŒããŒã®æ¥ç¶ã®åæåãè¡ãããŸãããã®æMCPãµãŒããŒã¯ãããã³ã«ã®ããŒãžã§ã³ãšãæ©èœãMCPã¯ã©ã€ã¢ã³ãã«è¿çããŸãã

ãã詳ããã¯ãã¡ã
-
åæåãªã¯ãšã¹ã
LLMã¢ããªèµ·åæã«ãMCPã¯ã©ã€ã¢ã³ãã¯å¯Ÿå¿ããMCPãµãŒããŒã«åæåãªã¯ãšã¹ããéä¿¡ã
-
ãµãŒããŒã®ãããã³ã«ããŒãžã§ã³ãšæ©èœã§å¿ç
MCPãµãŒããŒã¯ãããã³ã«ããŒãžã§ã³ãšãå©çšã§ããã¢ã¯ã·ã§ã³ã®äžèЧãå¿ç
-
確èªãšããŠåæåå®äºéç¥ãéä¿¡
MCPã¯ã©ã€ã¢ã³ãã¯ãåæåå®äºéç¥ãMCPãµãŒããŒã«éä¿¡
-
æ¥ç¶å®äº
-
-
LLMã¢ããªã¯ããã³ãããLLMã«éããŸãããã®ãšããMCPãµãŒããŒã®æ å ±ãäžç·ã«éã£ãŠããã¡ã€ã«ã·ã¹ãã ãå©çšã§ããããšãMCPã«äŒããŸãã

-
LLMã¯ãã¡ã€ã«äžèЧååŸã䜿ãã¹ããšå€æãå©çšæç€º(Function Calling)ã§è¿çããŸãã

-
LLMã¢ããªã¯ãå éšã§MCPã¯ã©ã€ã¢ã³ãã䜿ã£ãŠãMCPãµãŒããŒã«ã¢ã¯ã·ã§ã³ããªã¯ãšã¹ãããŸãã

-
MCPãµãŒããŒã¯ãã¡ã€ã«ã·ã¹ãã ã«å¯ŸããŠãäžèЧååŸã®ãªã¯ãšã¹ããéããŸãã

-
ãã¡ã€ã«ã·ã¹ãã ã¯çµæãè¿ããŸãã

-
MCPãµãŒããŒã¯çµæãMCPã¯ã©ã€ã¢ã³ãã«è¿åŽããŸãã

-
LLMã¢ããªã¯ãLLMã¯ã©ã€ã¢ã³ãããåãã£ãšã£ãçµæããå床LLMã«çµæãæããŸã

-
LLMã¯å®è¡çµæãèŠãŠããããªã«æåœ¢ãLLMã¢ããªã«è¿ããŸãã(ãããã¯ããã§ãããã«ããŒã«ã®å©çšæç€ºãåºããŸãã)

以äžã§ããå
šäœã®æµããæœè±¡åããŠã1æã®å³ã«ãŸãšãããšä»¥äžã®ããã«ãªããŸãã

å€éšãµãŒãã¹ããªã¢ãŒãã«ããå Žåã§ããä»çµã¿ã¯å
šãåãã§ãã
ãã®å Žåã§ããMCPãµãŒããŒã¯ããŒã«ã«ã«ç«ã€ããšã«æ³šæãå¿
èŠã§ãâ ïž
ãªã¢ãŒãã®å Žåã¯4. ã¢ã¯ã·ã§ã³å®è¡ãAPIãå©ãã®ãã»ãšãã©ã«ãªãããšæããŸãã

äœã£ãŠã¿ã
倧ãŸããªæµããããã£ããšããã§ãããããMCPãµãŒããŒ/ã¯ã©ã€ã¢ã³ããèªäœããŠã¿ãŸãããã
宿ããã³ãŒãã¯ãã¡ãã«çœ®ããŠãããŸãã
MCPãµãŒããŒãäœã
ç«ãæåãMCPãšããããšã§ãç«ã®ç»åãè¿ãMCPãµãŒããŒãå®è£
ããŠã¿ãŸãã
ããã©ã«ãã ãšãClaudeã¯ç«ã®ç»åãèŠæ±ããŠãå³ã®ããã€ã©ã¹ãããè¿ããŠãããŸããã

ç«ã®ç»åã®ååŸã«ã¯TheCatAPIã䜿çšããŸããã
äºåã«API KeyãååŸããŠãããŠãã ããã
-
ã¬ããžããªãæºåããŸãã
# ãããžã§ã¯ãçšã®æ°ãããã£ã¬ã¯ããªãäœæ mkdir cat_image cd cat_image # æ°ããnpmãããžã§ã¯ããåæå npm init -y # äŸåé¢ä¿ãã€ã³ã¹ããŒã« npm install @modelcontextprotocol/sdk zod npm install -D @types/node typescript # ãã¡ã€ã«ãäœæ mkdir src touch src/index.ts -
以äžã®ãããªã³ãŒããæžããŸã
index.tsimport { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { fetchCatImage } from "./fetchCatImage.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; // Create server instance const server = new McpServer({ name: "cat-image", version: "1.0.0", }); server.tool("get-cat-image", "Get a random cat image", async () => { const data = await fetchCatImage(); return { content: [ { type: "image", data, mimeType: "image/jpeg", }, ], }; }); async function main() { const transport = new StdioServerTransport(); await server.connect(transport); console.error("Cat Image MCP Server running on stdio"); } main().catch((error) => { console.error("Fatal error in main():", error); process.exit(1); });fetchCatImage.ts
export const fetchCatImage = async (): Promise<string> => { const API_KEY = process.env.CAT_API_KEY; if (!API_KEY) throw new Error("CAT_API_KEY environment variable is not set"); const response = await fetch(`https://api.thecatapi.com/v1/images/search?limit=1&api_key=${API_KEY}`); const data = await response.json(); const imageResponse = await fetch(data[0].url); const arrayBuffer = await imageResponse.arrayBuffer(); const base64 = Buffer.from(arrayBuffer).toString('base64'); return base64 }ããã€ããã€ã³ããã玹ä»ããŸãã
ãŸããæåã«McpServerã®ã€ã³ã¿ã³ã¹ãäœæããŸãã
// ãµãŒããŒã®ã€ã³ã¹ã¿ã³ã¹ãäœæ const server = new McpServer({ name: "cat-image", version: "1.0.0", });次ã«ããµãŒããŒã«æ©èœãå®çŸ©ããŸããä»åã¯ãµãŒããŒã§äœããã®åŠçãè¡ãToolsãå®çŸ©ããŸãã
server.tool( "get-cat-image", // åå "Get a random cat image", // èª¬ææ // åŒæ°ã®å®çŸ© { limit: z.number().optional().default(1), }, async ({ limit }) => { const data = await fetchCatImage(limit); return { content: [ { type: "image", data, mimeType: "image/jpeg", }, ], }; });æåŸã«èµ·ååŠçãæžããŠãå®äºã§ã ððŒ
async function main() { // æ¥ç¶åŠç const transport = new StdioServerTransport(); await server.connect(transport); console.error("Cat Image MCP Server running on stdio"); } main().catch((error) => { console.error("Fatal error in main():", error); process.exit(1); });
åäœç¢ºèª
å®è£ ã§ããã®ã§ãåäœã確èªããŠã¿ãŸãããã
- ãŸããå®è£ ãããµãŒããŒããã«ãããŸãã
$ tsc && chmod 755 build/index.js
- ç¶ããŠã
cat_imageãclaude_desktop_config.jsonã«ç»é²ããŸãã{path/to}ã®éšåã¯é©å®ãã䜿ãã®ç°å¢ãã®ã«ä¿®æ£ããŠãã ããã
{
"mcpServers": {
+ "cat_image": {
+ "command": "{path/to}/bin/node",
+ "args": ["{path/to}/build/index.js"],
+ "env": {
+ "CAT_API_KEY": "{ååŸããAPIKeyãããã«}"
+ }
+ }
}
}
-
Claudeãåèµ·åããŠã¿ãŸããããðšãæŒããŠãå©çšå¯èœãªMCPããŒã«ã«è¿œå ãããŠããã°OKã§ãã


-
ãç«ã®ç»åãã¡ããã ãããšèšã£ãŠã¿ãŸããããèŠäºClaudeãç«ã®åçãè¿ããŠãããããã«ãªããŸããðâ€ïž

MCPã¯ã©ã€ã¢ã³ããäœã
æåŸã«ç°¡åãªMCPã¯ã©ã€ã¢ã³ããå®è£ ããŠã¿ãŸãããã
-
ãŸãã¯ã¬ããžããªãæºåããŸãã
mkdir mcp-client-typescript cd mcp-client-typescript npm init -y npm install @anthropic-ai/sdk @modelcontextprotocol/sdk dotenv npm install -D @types/node typescript touch index.ts -
package.jsonãä¿®æ£
{ "type": "module", "scripts": { "build": "tsc && chmod 755 build/index.js" } } -
tsconfigãèšå®
{ "compilerOptions": { "target": "ES2022", "module": "Node16", "moduleResolution": "Node16", "outDir": "./build", "rootDir": "./", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true }, "include": ["index.ts"], "exclude": ["node_modules"] } -
APIçµç±ã§ANTHOROPICã®APIã䜿çšããã®ã§ãAPI Keyãç°å¢å€æ°ã«èšå®ããŸãã
$ echo "ANTHROPIC_API_KEY=<your key here>" > .env $ echo ".env" >> .gitignore -
ã¯ã©ã€ã¢ã³ããå®è£ ããŸã
index.ts
index.tsimport { Anthropic } from "@anthropic-ai/sdk"; import { MessageParam, Tool, } from "@anthropic-ai/sdk/resources/messages/messages.mjs"; import { Client } from "@modelcontextprotocol/sdk/client/index.js"; import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js"; import readline from "readline/promises"; import dotenv from "dotenv"; import terminalImage from "terminal-image"; dotenv.config(); const ANTHROPIC_API_KEY = process.env.ANTHROPIC_API_KEY; if (!ANTHROPIC_API_KEY) { throw new Error("ANTHROPIC_API_KEY is not set"); } class MCPClient { private mcp: Client private anthoripic: Anthropic private transport: StdioClientTransport | null = null private tools: Tool[] = [] constructor() { this.anthoripic = new Anthropic({ apiKey: ANTHROPIC_API_KEY, }) this.mcp = new Client({ name: "mcp-client", version: "0.1.0", }) } async connectToServer(serverScriptPath: string) { try { this.transport = new StdioClientTransport({ command: process.execPath, args: [serverScriptPath], }) this.mcp.connect(this.transport) const toolsResult = await this.mcp.listTools() this.tools = toolsResult.tools.map((tool) => ({ name: tool.name, description: tool.description, input_schema: tool.inputSchema, })) } catch (error) { console.log("Failed to connect to MCP server: ", error); throw error } } async processQuery(query: string) { const messages: MessageParam[] = [ { role: "user", content: query, }, ]; const response = await this.anthoripic.messages.create({ model: "claude-3-5-sonnet-20240620", max_tokens: 1000, messages, tools: this.tools }) const finalText: string[] = [] for (const content of response.content) { if (content.type === "text") { // è¿çãããã¹ãã®å Žå finalText.push(content.text) } else if (content.type === "tool_use") { // ããŒã«ãå®è¡ const toolName = content.name const toolArgs = content.input as { [x: string]: unknown } | undefined; console.log("ãããŒã«ã®å®è¡ã", toolName, toolArgs) const result = await this.mcp.callTool({ name: toolName, arguments: toolArgs, }) as { content: { type: string; data: string }[] } if (result.content) { const imageData = result.content[0].data; const buffer = Buffer.from(imageData, 'base64'); console.log(await terminalImage.buffer(buffer)); } } } return finalText.join("\n") } async chatLoop() { const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }) try { console.log("Welcome to MCP Client! Type 'exit' to quit.") while (true) { const query = await rl.question("You: ") if (query.toLowerCase() === "quit") { break } const response = await this.processQuery(query) console.log("MCP: ", response) } } catch (error) { console.error("Error: ", error) } finally { rl.close() } } async cleanup() { await this.mcp.close() } } async function main() { if (process.argv.length < 3) { console.log("Usage: node index.ts <path_to_server_script>"); return; } const mcpClient = new MCPClient(); try { await mcpClient.connectToServer(process.argv[2]); await mcpClient.chatLoop(); } finally { await mcpClient.cleanup(); process.exit(0); } } main()ãã¡ããããã€ãéèŠãªãã€ã³ããã玹ä»ããŸãã
ãŸããconnectToServerã¡ãœããã§ããµãŒããŒãšã®åæåæ¥ç¶åŠçãè¡ããŸãã
ãã®æãå©çšã§ããããŒã«ã®äžèЧãååŸããŠããŸããasync connectToServer(serverScriptPath: string) { try { // æ¥ç¶ this.transport = new StdioClientTransport({ command: process.execPath, args: [serverScriptPath], }) this.mcp.connect(this.transport) // ããŒã«ã®äžèЧãååŸ const toolsResult = await this.mcp.listTools() this.tools = toolsResult.tools.map((tool) => ({ name: tool.name, description: tool.description, input_schema: tool.inputSchema, })) } catch (error) { console.log("Failed to connect to MCP server: ", error); throw error } }processQueryã¡ãœããã§ã¯ãLLMãéããããŒã«ã®åŒã³åºããè¡ã£ãŠããŸãã
è¿ä¿¡ãtool_useã®å Žåã¯ãã¬ã¹ãã³ã¹ããç»åãååŸããŠè¡šç€ºããŠããŸããasync processQuery(query: string) { const messages: MessageParam[] = [ { role: "user", content: query, }, ]; // LLMã«ããŒã«ãšäžç·ã«ã¡ãã»ãŒãžãéã const response = await this.anthoripic.messages.create({ model: "claude-3-5-sonnet-20240620", max_tokens: 1000, messages, tools: this.tools }) const finalText: string[] = [] for (const content of response.content) { if (content.type === "text") { // è¿çãããã¹ãã®å Žå finalText.push(content.text) } else if (content.type === "tool_use") { // ããŒã«ãå®è¡ const toolName = content.name const toolArgs = content.input as { [x: string]: unknown } | undefined; const result = await this.mcp.callTool({ name: toolName, arguments: toolArgs, }) as { content: { type: string; data: string }[] } if (result.content) { // ç»åããŒã¿ã衚瀺 const imageData = result.content[0].data; const buffer = Buffer.from(imageData, 'base64'); console.log(await terminalImage.buffer(buffer)); } } } return finalText.join("\n") }
åäœç¢ºèª
ã§ã¯ããã¡ããåäœç¢ºèªããŠã¿ãŸãããïŒ
ãŸããã«ãããŸãã
$ npm run build
ã¯ã©ã€ã¢ã³ããèµ·åããŸãããã®æç¬¬äžåŒæ°ã«ãµãŒããŒã®ãã¹ãæå®ããŠãã ããã
$ node build/index.js /path/to/server/build/index.js
ç»è³ªãèãã§ãããèŠäºç«ã®ç»åã衚瀺ã§ããŸãã ððŒ

ãŸãšã
ä»åŸãMCPã«ãã£ãŠãLLMã¢ããªã¯ããã£ããããŒã«ããäœã§ãã§ããã¹ãŒããŒã¢ããªãžãšé²åããŠããå¯èœæ§ãé«ããã§ããæ¬¡ã¯ãããªãã®ãµãŒãã¹ãAPIãMCPã§ã€ãªãã§ã¿ãŸãããïŒ
ãã詳ããç¥ãããæ¹ã¯ãä»ååèã«ããå ¬åŒããã¥ã¡ã³ããã芧ãã ããã
Discussion
ãã¡ããã¡ããããããã解説ã§çŽ æŽãããã§ãã
æåããå³å¯ã«è©°ããã«äœéšãããŠã€ã¡ãŒãžãäžããããšããå§ãŸãæçµçã«å®è£ ãŸã§é²ããã®ã¯èŠäºã§ãã
åæã®ç¶æ ããã®Function Callingã®ç»å ŽããããŠèŠæ ŒåãããMCPããªãå¿ èŠã ã£ãã®ãïŒæŽå²ççµç·¯ãèžãŸãã説æãããã®ãç¹æ®µã®é æ ®ããªãããŠãã解説ã§ããã
ããŒããããšãããããŸããå¬ããã§ãïŒïŒ
å ¬åŒããã¥ã¡ã³ãã®åããã«ããéšåããèªåãªãã«åã¿ç ããŠã¿ãŸããðŠ·
èªåã説æå¥œãå±ãªãã§ãããæ ¹æ¬çã«ã¯èªè ã«ããã£ãŠããããããšãã芪åå¿ã ã£ãããæ§æãè©±ã®æã£ãŠãããããäŸç€ºãå³è§£èœåãã¹ãã«ãšããªãã§ãããäžçš®ã®æèœãç±æããªããšé£ããã§ããããç¹ã«ããããèšäºã³ãã¥ããã£ïŒãããã¯äžçã¬ãã«ã§ïŒããããã¯å ¥éåéã§ã¯ããã³ããã®åã«ããããã®ã§ä»åŸãã©ãã©ãå¹ åºãåéã§æŽ»èºããŠããã ãããã§ãã
ç¡æã§ããã ãã®ã¬ãã«ã®ãã®ãåºãããŠããŸããšãªããšåºç瀟ã¯å売äžãã£ããã ãšæããŸããããèªèº«ã©ãã©ãåçåããããŠã»ãããšé¡ã£ãŠãã¿ãŸããã
è€ã殺ã...ããããšãããããŸãïŒïŒ
ãããã解説èšäºã¯ãèªåãçè§£ããããšããäžçªã®ç®çã«æžããŠããŸãã
ãã®ãããããã§åçåãªã©ã¯èããŠãããŸããã(æ¬æ¥ã¯å人éçºè ãããŠããŸãã)
ãããæã ã«ã¯ãªã£ãŠããŸããŸãããä»åŸãéèŠã ãšæãæŠå¿µãåºãŠããéã«ã¯ãç¡æã§è§£èª¬èšäºãå ¬éããããšæã£ãŠããŸãããšãŠãå±ã¿ãèªä¿¡ã«ãªããŸãããæ¹ããŠããããšãããããŸãïŒ