Token导航 LogoToken导航TokenDH.com
2025 MCP Lab Fast MCP logo
运维云端stdio官方级别未说明来源级核验

2025 MCP Lab Fast MCP

MCP Server

fastmcp

FastMCP是一个用于构建支持客户端会话管理的MCP服务器的TypeScript框架,提供工具定义、认证、会话管理等功能,适用于需要实时交互和会话控制的开发场景。

工具数

4

提示词数

0

GitHub Stars

1

资源数

0
会话管理TypeScriptClaudeClaude DesktopClaude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

yamato-snow

提供方

yamato-snow

最后核验

2026/5/17 20:21

运行时

Node.js

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

npx fastmcp dev src/examples/addition.ts

详细介绍

FastMCP

FastMCP可以管理客户端会话主控程序构建服务器TypeScript框架。

\[!注意\] Python安装版是FastMCP Python来修改标记元素的显示属性。

主要功能

FastMCP提供以下功能:

安装方法

npm install fastmcp

快速启动

\[!注意\] 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)是服务器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定义工具参数标准架构正在使用规格。因此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:图像URL
  • path图像文件路径
  • buffer:作为缓冲区的图像数据

urlpathbuffer中所述修改相应参数的值。

以上示例等效于:

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(),
    };
  },
});
\[!注意\] load可以返回多个资源。例如,它可以用于在加载目录时返回目录中文件的列表。 ``ts 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;

为每个客户端连接分配新的服务器实例,以允许客户端和服务器之间的一对一通信。

类型服务器事件

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": {
        "環境変数名": "値"
      }
    }
  }
}

事例绍介

\[!注意\] FastMCP来定义自定义外观PR提出请作为事例介绍!

谢辞

目录标签

目录标签

会话管理TypeScriptClaude本地部署TypeScript框架实时交互工具定义认证功能

支持客户端

Claude DesktopClaude

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

api-key

运行时(runtime,运行环境)

Node.js

来源包(packageName,安装包名)

fastmcp

工具数量(toolCount,工具数)

4

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdioapi-key部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP