2025 McpLab FastMCP
FastMCPã®ãã¹ããããŸã
Ask AI about 2025 McpLab FastMCP
Powered by Claude · Grounded in docs
I know everything about 2025 McpLab FastMCP. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
FastMCP
FastMCPã¯ãã¯ã©ã€ã¢ã³ãã»ãã·ã§ã³ç®¡çãå¯èœãªMCPãµãŒããŒãæ§ç¯ããããã®TypeScriptãã¬ãŒã ã¯ãŒã¯ã§ãã
[!NOTE]
Pythonå®è£ çã¯FastMCP Pythonãã芧ãã ããã
äž»ãªæ©èœ
FastMCPã¯ä»¥äžã®æ©èœãæäŸããŸãïŒ
- ã·ã³ãã«ãªããŒã«ããªãœãŒã¹ãããã³ããå®çŸ©
- èªèšŒæ©èœ
- ã»ãã·ã§ã³ç®¡ç
- ç»åã³ã³ãã³ã察å¿
- ãã®ã³ã°
- ãšã©ãŒãã³ããªã³ã°
- SSE(Server-Sent Events)
- CORSïŒããã©ã«ãã§æå¹ïŒ
- 鲿éç¥
- åä»ããµãŒããŒã€ãã³ã
- ããã³ããåŒæ°ã®èªåè£å®
- ãµã³ããªã³ã°ãªã¯ãšã¹ã
- èªåSSEãã³ã°
- ã«ãŒã管ç
- ãã¹ãããããã°ã®ããã®CLI
ã€ã³ã¹ããŒã«æ¹æ³
npm install fastmcp
ã¯ã€ãã¯ã¹ã¿ãŒã
[!NOTE]
FastMCPã®å®éã®äœ¿çšäŸã¯å€æ°ãããŸããäºäŸç޹ä»ãã芧ãã ããã
import { FastMCP } from "fastmcp";
import { z } from "zod"; // ãŸãã¯ä»ã®æ€èšŒã©ã€ãã©ãªïŒStandard SchemaããµããŒãããŠãããã®ïŒ
const server = new FastMCP({
name: "ãã€ãµãŒããŒ",
version: "1.0.0",
});
server.addTool({
name: "add",
description: "2ã€ã®æ°å€ãè¶³ãç®ããŸã",
parameters: z.object({
a: z.number(),
b: z.number(),
}),
execute: async (args) => {
return String(args.a + args.b);
},
});
server.start({
transportType: "stdio",
});
ããã ãã§åäœããMCPãµãŒããŒãã§ããŸããïŒ
ã¿ãŒããã«ã§ä»¥äžã®ããã«ãã¹ãã§ããŸãïŒ
git clone https://github.com/punkpeye/fastmcp.git
cd fastmcp
pnpm install
pnpm build
# CLIã䜿ã£ãè¶³ãç®ãµãŒããŒã®äŸããã¹ãïŒ
npx fastmcp dev src/examples/addition.ts
# MCP Inspectorã䜿ã£ãè¶³ãç®ãµãŒããŒã®äŸãæ€æ»ïŒ
npx fastmcp inspect src/examples/addition.ts
SSE
Server-Sent EventsïŒSSEïŒã¯ããµãŒããŒãHTTPSæ¥ç¶ãä»ããŠã¯ã©ã€ã¢ã³ãã«ãªã¢ã«ã¿ã€ã æŽæ°ãéä¿¡ããã¡ã«ããºã ã§ããMCPã«ãããŠãSSEã¯äž»ã«ãªã¢ãŒãMCPéä¿¡ãå¯èœã«ããããã«äœ¿çšããããªã¢ãŒããã·ã³ã§ãã¹ããããMCPã«ã¢ã¯ã»ã¹ããŠãããã¯ãŒã¯çµç±ã§æŽæ°ãäžç¶ã§ããããã«ããŸãã
SSEãµããŒãä»ãã§ãµãŒããŒãå®è¡ããããšãã§ããŸãïŒ
server.start({
transportType: "sse",
sse: {
endpoint: "/sse",
port: 8080,
},
});
ããã«ããããµãŒããŒãèµ·åããhttp://localhost:8080/sseã§SSEæ¥ç¶ããªãã¹ã³ããŸãã
ãã®åŸãSSEClientTransportã䜿çšããŠãµãŒããŒã«æ¥ç¶ã§ããŸãïŒ
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
const client = new Client(
{
name: "example-client",
version: "1.0.0",
},
{
capabilities: {},
},
);
const transport = new SSEClientTransport(new URL(`http://localhost:8080/sse`));
await client.connect(transport);
åºæ¬æŠå¿µ
ããŒã«
MCPã®ããŒã«ã§ã¯ããµãŒããŒãå®è¡å¯èœãªé¢æ°ãå ¬éããã¯ã©ã€ã¢ã³ããLLMãã¢ã¯ã·ã§ã³ãå®è¡ããããã«åŒã³åºãããšãã§ããŸãã
FastMCPã¯ããŒã«ãã©ã¡ãŒã¿ãŒã®å®çŸ©ã«Standard Schema仿§ã䜿çšããŠããŸããããã«ãããZodãArkTypeãValibotãªã©ã仿§ãå®è£ ããŠãã奜ã¿ã®ã¹ããŒãæ€èšŒã©ã€ãã©ãªã䜿çšã§ããŸãã
Zodã®äŸïŒ
import { z } from "zod";
server.addTool({
name: "fetch-zod",
description: "URLã®ã³ã³ãã³ããååŸããŸãïŒZodã䜿çšïŒ",
parameters: z.object({
url: z.string(),
}),
execute: async (args) => {
return await fetchWebpageContent(args.url);
},
});
ArkTypeã®äŸïŒ
import { type } from "arktype";
server.addTool({
name: "fetch-arktype",
description: "URLã®ã³ã³ãã³ããååŸããŸãïŒArkTypeã䜿çšïŒ",
parameters: type({
url: "string",
}),
execute: async (args) => {
return await fetchWebpageContent(args.url);
},
});
Valibotã®äŸïŒ
Valibotã«ã¯ãã¢äŸåé¢ä¿@valibot/to-json-schemaãå¿ èŠã§ãã
import * as v from "valibot";
server.addTool({
name: "fetch-valibot",
description: "URLã®ã³ã³ãã³ããååŸããŸãïŒValibotã䜿çšïŒ",
parameters: v.object({
url: v.string(),
}),
execute: async (args) => {
return await fetchWebpageContent(args.url);
},
});
æååãè¿ã
executeã¯æååãè¿ãããšãã§ããŸãïŒ
server.addTool({
name: "download",
description: "ãã¡ã€ã«ãããŠã³ããŒãããŸã",
parameters: z.object({
url: z.string(),
}),
execute: async (args) => {
return "ããã«ã¡ã¯ãäžçïŒ";
},
});
ããã¯ä»¥äžãšåçã§ãïŒ
server.addTool({
name: "download",
description: "ãã¡ã€ã«ãããŠã³ããŒãããŸã",
parameters: z.object({
url: z.string(),
}),
execute: async (args) => {
return {
content: [
{
type: "text",
text: "ããã«ã¡ã¯ãäžçïŒ",
},
],
};
},
});
ãªã¹ããè¿ã
ã¡ãã»ãŒãžã®ãªã¹ããè¿ãããå Žåã¯ãcontentããããã£ãæã€ãªããžã§ã¯ããè¿ããŸãïŒ
server.addTool({
name: "download",
description: "ãã¡ã€ã«ãããŠã³ããŒãããŸã",
parameters: z.object({
url: z.string(),
}),
execute: async (args) => {
return {
content: [
{ type: "text", text: "1ã€ç®ã®ã¡ãã»ãŒãž" },
{ type: "text", text: "2ã€ç®ã®ã¡ãã»ãŒãž" },
],
};
},
});
ç»åã®è¿åŽ
ç»åã®ã³ã³ãã³ããªããžã§ã¯ããäœæããã«ã¯ãimageContentã䜿çšããŸãïŒ
import { imageContent } from "fastmcp";
server.addTool({
name: "download",
description: "ãã¡ã€ã«ãããŠã³ããŒãããŸã",
parameters: z.object({
url: z.string(),
}),
execute: async (args) => {
return imageContent({
url: "https://example.com/image.png",
});
// ãŸãã¯...
// return imageContent({
// path: "/path/to/image.png",
// });
// ãŸãã¯...
// return imageContent({
// buffer: Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=", "base64"),
// });
// ãŸãã¯...
// return {
// content: [
// await imageContent(...)
// ],
// };
},
});
imageContent颿°ã¯ä»¥äžã®ãªãã·ã§ã³ãåãåããŸãïŒ
url: ç»åã®URLpath: ç»åãã¡ã€ã«ãžã®ãã¹buffer: ãããã¡ãšããŠã®ç»åããŒã¿
urlãpathãbufferã®ãããã1ã€ã®ã¿ãæå®ããå¿
èŠããããŸãã
äžã®äŸã¯ä»¥äžãšåçã§ãïŒ
server.addTool({
name: "download",
description: "ãã¡ã€ã«ãããŠã³ããŒãããŸã",
parameters: z.object({
url: z.string(),
}),
execute: async (args) => {
return {
content: [
{
type: "image",
data: "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=",
mimeType: "image/png",
},
],
};
},
});
ãã®ã³ã°
ããŒã«ã¯ã³ã³ããã¹ããªããžã§ã¯ãã®logã䜿çšããŠã¯ã©ã€ã¢ã³ãã«ã¡ãã»ãŒãžããã°åºåã§ããŸãïŒ
server.addTool({
name: "download",
description: "ãã¡ã€ã«ãããŠã³ããŒãããŸã",
parameters: z.object({
url: z.string(),
}),
execute: async (args, { log }) => {
log.info("ãã¡ã€ã«ãããŠã³ããŒãäž...", {
url: args.url,
});
// ...
log.info("ãã¡ã€ã«ãããŠã³ããŒãããŸãã");
return "å®äº";
},
});
logãªããžã§ã¯ãã«ã¯ä»¥äžã®ã¡ãœããããããŸãïŒ
debug(message: string, data?: SerializableValue)error(message: string, data?: SerializableValue)info(message: string, data?: SerializableValue)warn(message: string, data?: SerializableValue)
ãšã©ãŒ
ãŠãŒã¶ãŒã«è¡šç€ºãããã¹ããšã©ãŒã¯ãUserErrorã€ã³ã¹ã¿ã³ã¹ãšããŠã¹ããŒããå¿
èŠããããŸãïŒ
import { UserError } from "fastmcp";
server.addTool({
name: "download",
description: "ãã¡ã€ã«ãããŠã³ããŒãããŸã",
parameters: z.object({
url: z.string(),
}),
execute: async (args) => {
if (args.url.startsWith("https://example.com")) {
throw new UserError("ãã®URLã¯èš±å¯ãããŠããŸãã");
}
return "å®äº";
},
});
鲿éç¥
ããŒã«ã¯ã³ã³ããã¹ããªããžã§ã¯ãã®reportProgressãåŒã³åºãããšã§é²æãå ±åã§ããŸãïŒ
server.addTool({
name: "download",
description: "ãã¡ã€ã«ãããŠã³ããŒãããŸã",
parameters: z.object({
url: z.string(),
}),
execute: async (args, { reportProgress }) => {
reportProgress({
progress: 0,
total: 100,
});
// ...
reportProgress({
progress: 100,
total: 100,
});
return "å®äº";
},
});
ãªãœãŒã¹
ãªãœãŒã¹ã¯ãMCPãµãŒããŒãã¯ã©ã€ã¢ã³ãã«æäŸãããããããçš®é¡ã®ããŒã¿ã衚ããŸããããã«ã¯ä»¥äžãå«ãŸããŸãïŒ
- ãã¡ã€ã«ã®å 容
- ã¹ã¯ãªãŒã³ã·ã§ãããç»å
- ãã°ãã¡ã€ã«
- ãã®ä»å€æ°
åãªãœãŒã¹ã¯äžæã®URIã§èå¥ãããããã¹ããŸãã¯ãã€ããªããŒã¿ãå«ãããšãã§ããŸãã
server.addResource({
uri: "file:///logs/app.log",
name: "ã¢ããªã±ãŒã·ã§ã³ãã°",
mimeType: "text/plain",
async load() {
return {
text: await readLogFile(),
};
},
});
[!NOTE]
loadã¯è€æ°ã®ãªãœãŒã¹ãè¿ãããšãã§ããŸããããã¯äŸãã°ããã£ã¬ã¯ããªãèªã¿èŸŒãŸãããšãã«ãã£ã¬ã¯ããªå ã®ãã¡ã€ã«ã®ãªã¹ããè¿ãããã«äœ¿çšã§ããŸããasync load() { return [ { text: "1ã€ç®ã®ãã¡ã€ã«ã®å 容", }, { text: "2ã€ç®ã®ãã¡ã€ã«ã®å 容", }, ]; }
loadã§ãã€ããªã³ã³ãã³ããè¿ãããšãã§ããŸãïŒ
async load() {
return {
blob: 'base64ã§ãšã³ã³ãŒããããããŒã¿'
};
}
ãªãœãŒã¹ãã³ãã¬ãŒã
ãªãœãŒã¹ãã³ãã¬ãŒããå®çŸ©ããããšãã§ããŸãïŒ
server.addResourceTemplate({
uriTemplate: "file:///logs/{name}.log",
name: "ã¢ããªã±ãŒã·ã§ã³ãã°",
mimeType: "text/plain",
arguments: [
{
name: "name",
description: "ãã°ã®åå",
required: true,
},
],
async load({ name }) {
return {
text: `${name}ã®ãµã³ãã«ãã°å
容`,
};
},
});
ãªãœãŒã¹ãã³ãã¬ãŒãåŒæ°ã®èªåè£å®
ãªãœãŒã¹ãã³ãã¬ãŒãåŒæ°ã®èªåè£å®ãæå¹ã«ããããã«ãcomplete颿°ãæäŸããŸãïŒ
server.addResourceTemplate({
uriTemplate: "file:///logs/{name}.log",
name: "ã¢ããªã±ãŒã·ã§ã³ãã°",
mimeType: "text/plain",
arguments: [
{
name: "name",
description: "ãã°ã®åå",
required: true,
complete: async (value) => {
if (value === "ãµã³ãã«") {
return {
values: ["ãµã³ãã«ãã°"],
};
}
return {
values: [],
};
},
},
],
async load({ name }) {
return {
text: `${name}ã®ãµã³ãã«ãã°å
容`,
};
},
});
ããã³ãã
ããã³ããã¯ããµãŒããŒãåå©çšå¯èœãªããã³ãããã³ãã¬ãŒããšã¯ãŒã¯ãããŒãå®çŸ©ããã¯ã©ã€ã¢ã³ãããŠãŒã¶ãŒãLLMã«ç°¡åã«æç€ºã§ããããã«ããŸããããã«ãããäžè¬çãªLLMã€ã³ã¿ã©ã¯ã·ã§ã³ãæšæºåããŠå ±æããããã®åŒ·åãªæ¹æ³ãæäŸããŸãã
server.addPrompt({
name: "git-commit",
description: "Gitã³ãããã¡ãã»ãŒãžãçæããŸã",
arguments: [
{
name: "changes",
description: "Gitã®å·®åãŸãã¯å€æŽã®èª¬æ",
required: true,
},
],
load: async (args) => {
return `ãããã®å€æŽã«å¯Ÿããç°¡æœãã€èª¬æçãªã³ãããã¡ãã»ãŒãžãçæããŠãã ããïŒ\n\n${args.changes}`;
},
});
ããã³ããåŒæ°ã®èªåè£å®
ããã³ããã¯åŒæ°ã®èªåè£å®ãæäŸã§ããŸãïŒ
server.addPrompt({
name: "countryPoem",
description: "åœã«ã€ããŠã®è©©ãæžããŸã",
load: async ({ name }) => {
return `ããã«ã¡ã¯ã${name}ããïŒ`;
},
arguments: [
{
name: "name",
description: "åœã®åå",
required: true,
complete: async (value) => {
if (value === "æ¥") {
return {
values: ["æ¥æ¬"],
};
}
return {
values: [],
};
},
},
],
});
enumã䜿çšããããã³ããåŒæ°ã®èªåè£å®
åŒæ°ã«enumé
åãæäŸãããšããµãŒããŒã¯èªåçã«åŒæ°ã®è£å®ãæäŸããŸãã
server.addPrompt({
name: "countryPoem",
description: "åœã«ã€ããŠã®è©©ãæžããŸã",
load: async ({ name }) => {
return `ããã«ã¡ã¯ã${name}ããïŒ`;
},
arguments: [
{
name: "name",
description: "åœã®åå",
required: true,
enum: ["æ¥æ¬", "ãã©ã³ã¹", "ã€ã¿ãªã¢"],
},
],
});
èªèšŒ
FastMCPã§ã¯ã«ã¹ã¿ã 颿°ã䜿çšããŠã¯ã©ã€ã¢ã³ããauthenticateã§ããŸãïŒ
import { AuthError } from "fastmcp";
const server = new FastMCP({
name: "ãã€ãµãŒããŒ",
version: "1.0.0",
authenticate: ({request}) => {
const apiKey = request.headers["x-api-key"];
if (apiKey !== '123') {
throw new Response(null, {
status: 401,
statusText: "Unauthorized",
});
}
// ããã§è¿ããã®ã¯`context.session`ãªããžã§ã¯ãã§ã¢ã¯ã»ã¹ã§ããŸã
return {
id: 1,
}
},
});
ããã§ãããŒã«å ã§èªèšŒãããã»ãã·ã§ã³ããŒã¿ã«ã¢ã¯ã»ã¹ã§ããŸãïŒ
server.addTool({
name: "sayHello",
execute: async (args, { session }) => {
return `ããã«ã¡ã¯ã${session.id}ããïŒ`;
},
});
ã»ãã·ã§ã³
sessionãªããžã§ã¯ãã¯FastMCPSessionã®ã€ã³ã¹ã¿ã³ã¹ã§ãããã¢ã¯ãã£ããªã¯ã©ã€ã¢ã³ãã»ãã·ã§ã³ãèšè¿°ããŸãã
server.sessions;
ã¯ã©ã€ã¢ã³ããšãµãŒããŒéã®1察1éä¿¡ãå¯èœã«ããããã«ãåã¯ã©ã€ã¢ã³ãæ¥ç¶ã«å¯ŸããŠæ°ãããµãŒããŒã€ã³ã¹ã¿ã³ã¹ãå²ãåœãŠãŸãã
åä»ããµãŒããŒã€ãã³ã
onã¡ãœããã䜿çšããŠãµãŒããŒããçºè¡ãããã€ãã³ãããªãã¹ã³ã§ããŸãïŒ
server.on("connect", (event) => {
console.log("ã¯ã©ã€ã¢ã³ãæ¥ç¶:", event.session);
});
server.on("disconnect", (event) => {
console.log("ã¯ã©ã€ã¢ã³ãåæ:", event.session);
});
FastMCPSession
FastMCPSessionã¯ã¯ã©ã€ã¢ã³ãã»ãã·ã§ã³ã衚ããã¯ã©ã€ã¢ã³ããšããåãããããã®ã¡ãœãããæäŸããŸãã
FastMCPSessionã€ã³ã¹ã¿ã³ã¹ã®ååŸæ¹æ³ã«ã€ããŠã¯ãã»ãã·ã§ã³ã®äŸãåç
§ããŠãã ããã
requestSampling
requestSamplingã¯ãµã³ããªã³ã°ãªã¯ãšã¹ããäœæããã¬ã¹ãã³ã¹ãè¿ããŸãã
await session.requestSampling({
messages: [
{
role: "user",
content: {
type: "text",
text: "çŸåšã®ãã£ã¬ã¯ããªã«ã¯ã©ã®ãã¡ã€ã«ããããŸããïŒ",
},
},
],
systemPrompt: "ããªãã¯åœ¹ç«ã€ãã¡ã€ã«ã·ã¹ãã ã¢ã·ã¹ã¿ã³ãã§ãã",
includeContext: "thisServer",
maxTokens: 100,
});
clientCapabilities
clientCapabilitiesããããã£ã«ã¯ã¯ã©ã€ã¢ã³ãæ©èœãå«ãŸããŠããŸãã
session.clientCapabilities;
loggingLevel
loggingLevelããããã£ã¯ãã¯ã©ã€ã¢ã³ãã«ãã£ãŠèšå®ããããã®ã³ã°ã¬ãã«ãèšè¿°ããŸãã
session.loggingLevel;
roots
rootsããããã£ã«ã¯ãã¯ã©ã€ã¢ã³ãã«ãã£ãŠèšå®ãããã«ãŒããå«ãŸããŠããŸãã
session.roots;
server
serverããããã£ã«ã¯ãã»ãã·ã§ã³ã«é¢é£ä»ããããMCPãµãŒããŒã®ã€ã³ã¹ã¿ã³ã¹ãå«ãŸããŠããŸãã
session.server;
åä»ãã»ãã·ã§ã³ã€ãã³ã
onã¡ãœããã䜿çšããŠã»ãã·ã§ã³ããçºè¡ãããã€ãã³ãããªãã¹ã³ã§ããŸãïŒ
session.on("rootsChanged", (event) => {
console.log("ã«ãŒã倿Ž:", event.roots);
});
session.on("error", (event) => {
console.error("ãšã©ãŒ:", event.error);
});
ãµãŒããŒã®å®è¡
MCP-CLIã§ãã¹ã
ãµãŒããŒããã¹ãããŠãããã°ããæéã®æ¹æ³ã¯ãfastmcp devã䜿çšããããšã§ãïŒ
npx fastmcp dev server.js
npx fastmcp dev server.ts
ããã«ãããmcp-cliã䜿çšããŠã¿ãŒããã«ã§MCPãµãŒããŒããã¹ãããã³ãããã°ããããã®ãµãŒããŒãå®è¡ãããŸãã
MCP Inspectorã§æ€æ»
ããäžã€ã®æ¹æ³ã¯ãå
¬åŒã®MCP Inspectorã䜿çšããŠWebUIã§ãµãŒããŒãæ€æ»ããããšã§ãïŒ
npx fastmcp inspect server.ts
ãããã質å
Claude Desktopã§äœ¿çšããã«ã¯ïŒ
ã¬ã€ã https://modelcontextprotocol.io/quickstart/user ã«åŸã£ãŠã次ã®èšå®ã远å ããŠãã ããïŒ
{
"mcpServers": {
"my-mcp-server": {
"command": "npx",
"args": [
"tsx",
"/ãããžã§ã¯ããžã®ãã¹/src/index.ts"
],
"env": {
"ç°å¢å€æ°å": "å€"
}
}
}
}
äºäŸç޹ä»
[!NOTE]
FastMCPã䜿çšãããµãŒããŒãéçºããå Žåã¯ããã²PRæåºããŠäºäŸãšããŠç޹ä»ããŠãã ããïŒ
- apinetwork/piapi-mcp-server - Midjourney/Flux/Kling/LumaLabs/Udio/Chrip/Trellisã䜿çšããŠã¡ãã£ã¢ãçæ
- domdomegg/computer-use-mcp - ã³ã³ãã¥ãŒã¿ãå¶åŸ¡
- LiterallyBlah/Dradis-MCP â Dradisã§ãããžã§ã¯ããšè匱æ§ã管ç
- Meeting-Baas/meeting-mcp - äŒè°ãããã®äœæãè°äºé²ã®æ€çŽ¢ãé²ç»ããŒã¿ã®ç®¡ç
- drumnation/unsplash-smart-mcp-server â AIãšãŒãžã§ã³ããUnsplashããããã®åçãã·ãŒã ã¬ã¹ã«æ€çŽ¢ãæšå¥šãé ä¿¡ã§ããããã«ãã
- ssmanji89/halopsa-workflows-mcp - HaloPSAã¯ãŒã¯ãããŒãšAIã¢ã·ã¹ã¿ã³ãã®çµ±å
- aiamblichus/mcp-chat-adapter â LLMããã£ããå®äºã䜿çšããããã®ã¯ãªãŒã³ãªã€ã³ã¿ãŒãã§ãŒã¹ãæäŸ
è¬èŸ
- FastMCPã¯Jonathan Lowinã«ããPythonå®è£ ã«çæ³ãåŸãŠããŸãã
- ã³ãŒãããŒã¹ã®äžéšã¯LiteMCPããæ¡çšãããŸããã
- ã³ãŒãããŒã¹ã®äžéšã¯Model Context protocolã§SSEããã£ãŠã¿ãããæ¡çšãããŸããã
