MCP Framework

Integrations

  • Supports distribution through npm, allowing developers to publish their MCP servers and have users install them with a simple npx command.

  • Built specifically for TypeScript with full type safety, enabling developers to create MCP tools, prompts, and resources with proper typing and validation.

  • Uses Zod for schema validation in tools, allowing developers to define input validation schemas for tool parameters with proper typing and runtime validation.

MCP框架

用于构建模型上下文协议 (MCP) 服务器的 TypeScript 框架。

与原版的差异

该分支(@ronangrant/mcp-framework)包括以下改进:

  • 用仅控制台的日志记录替换基于文件的日志记录,以获得更好的兼容性和可靠性
  • 消除了对文件系统日志的依赖,消除了 ENOENT 错误
  • 简化日志记录实现,同时保持相同的接口
  • 所有日志现在通过 console.error() 输出到 stderr

安装

npm install @ronangrant/mcp-framework

用法

创建一个新的 MCP 服务器:

import { MCPServer } from '@ronangrant/mcp-framework'; const server = new MCPServer({ name: "my-server", version: "1.0.0" }); await server.start();

特征

  • 用于创建 MCP 服务器的易于使用的 API
  • 内置对工具、提示和资源的支持
  • 带有控制台输出的简化日志系统
  • 全面支持 TypeScript
  • 灵活的交通选择

执照

麻省理工学院

MCP-Framework 是一个使用 TypeScript 优雅地构建模型上下文协议 (MCP) 服务器的框架。

MCP-Framework 为您提供开箱即用的架构,并支持基于目录的自动工具、资源和提示符发现功能。使用我们强大的 MCP 抽象,您可以优雅地定义工具、资源或提示符。我们的命令行界面让您轻松上手 MCP 服务器。

特征

  • 🛠️ 自动发现和加载工具、资源和提示
  • 多种传输支持(stdio、SSE)
  • 具有完全类型安全性的 TypeScript 优先开发
  • 基于官方 MCP SDK 构建
  • 易于使用的工具、提示和资源基类
  • SSE 端点的开箱即用身份验证

点击此处阅读完整文档

使用 mcp-framework 创建存储库

使用 CLI(推荐)

# Install the framework globally npm install -g mcp-framework # Create a new MCP server project mcp create my-mcp-server # Navigate to your project cd my-mcp-server # Your server is ready to use!

CLI 使用

该框架提供了强大的 CLI 来管理您的 MCP 服务器项目:

项目创建

# Create a new project mcp create <your project name here>

添加工具

# Add a new tool mcp add tool price-fetcher

添加提示

# Add a new prompt mcp add prompt price-analysis

添加资源

# Add a new prompt mcp add resource market-data

开发工作流程

  1. 创建你的项目:
mcp create my-mcp-server cd my-mcp-server
  1. 根据需要添加工具:
    mcp add tool data-fetcher mcp add tool data-processor mcp add tool report-generator
  2. 建造:
    npm run build
  3. 添加到 MCP 客户端(请参阅下面的 Claude Desktop 示例)

与 Claude Desktop 一起使用

本地开发

将此配置添加到您的 Claude Desktop 配置文件:

MacOS`~/Library/Application Support/Claude/claude_desktop_config.json` Windows`%APPDATA%/Claude/claude_desktop_config.json`

{ "mcpServers": { "${projectName}": { "command": "node", "args":["/absolute/path/to/${projectName}/dist/index.js"] } } }

发布后

将此配置添加到您的 Claude Desktop 配置文件:

MacOS`~/Library/Application Support/Claude/claude_desktop_config.json` Windows`%APPDATA%/Claude/claude_desktop_config.json`

{ "mcpServers": { "${projectName}": { "command": "npx", "args": ["${projectName}"] } } }

构建和测试

  1. 更改你的工具
  2. 运行 `npm run build` 进行编译
  3. 服务器将在启动时自动加载您的工具

快速入门

创建工具

import { MCPTool } from "mcp-framework"; import { z } from "zod"; interface ExampleInput { message: string; } class ExampleTool extends MCPTool<ExampleInput> { name = "example_tool"; description = "An example tool that processes messages"; schema = { message: { type: z.string(), description: "Message to process", }, }; async execute(input: ExampleInput) { return `Processed: ${input.message}`; } } export default ExampleTool;

设置服务器

import { MCPServer } from "mcp-framework"; const server = new MCPServer(); // OR (mutually exclusive!) with SSE transport const server = new MCPServer({ transport: { type: "sse", options: { port: 8080 // Optional (default: 8080) } } }); // Start the server await server.start();

传输配置

stdio 传输(默认)

如果没有提供传输配置,则默认使用 stdio 传输:

const server = new MCPServer(); // or explicitly: const server = new MCPServer({ transport: { type: "stdio" } });

上交所运输

要使用服务器发送事件 (SSE) 传输:

const server = new MCPServer({ transport: { type: "sse", options: { port: 8080, // Optional (default: 8080) endpoint: "/sse", // Optional (default: "/sse") messageEndpoint: "/messages", // Optional (default: "/messages") cors: { allowOrigin: "*", // Optional (default: "*") allowMethods: "GET, POST, OPTIONS", // Optional (default: "GET, POST, OPTIONS") allowHeaders: "Content-Type, Authorization, x-api-key", // Optional (default: "Content-Type, Authorization, x-api-key") exposeHeaders: "Content-Type, Authorization, x-api-key", // Optional (default: "Content-Type, Authorization, x-api-key") maxAge: "86400" // Optional (default: "86400") } } } });

CORS 配置

SSE 传输支持灵活的 CORS 配置。默认情况下,它使用适合开发的宽松设置。对于生产环境,您应该根据自己的安全需求配置 CORS:

const server = new MCPServer({ transport: { type: "sse", options: { // Restrict to specific origin cors: { allowOrigin: "https://myapp.com", allowMethods: "GET, POST", allowHeaders: "Content-Type, Authorization", exposeHeaders: "Content-Type, Authorization", maxAge: "3600" } } } }); // Or with multiple allowed origins const server = new MCPServer({ transport: { type: "sse", options: { cors: { allowOrigin: "https://app1.com, https://app2.com", allowMethods: "GET, POST, OPTIONS", allowHeaders: "Content-Type, Authorization, Custom-Header", exposeHeaders: "Content-Type, Authorization", maxAge: "86400" } } } });

验证

MCP 框架为 SSE 端点提供了可选的身份验证方式。您可以选择 JWT 或 API Key 身份验证,也可以实现自定义的身份验证提供程序。

JWT 身份验证

import { MCPServer, JWTAuthProvider } from "mcp-framework"; import { Algorithm } from "jsonwebtoken"; const server = new MCPServer({ transport: { type: "sse", options: { auth: { provider: new JWTAuthProvider({ secret: process.env.JWT_SECRET, algorithms: ["HS256" as Algorithm], // Optional (default: ["HS256"]) headerName: "Authorization" // Optional (default: "Authorization") }), endpoints: { sse: true, // Protect SSE endpoint (default: false) messages: true // Protect message endpoint (default: true) } } } } });

客户端必须在授权标头中包含有效的 JWT 令牌:

Authorization: Bearer eyJhbGciOiJIUzI1NiIs...

API 密钥认证

import { MCPServer, APIKeyAuthProvider } from "mcp-framework"; const server = new MCPServer({ transport: { type: "sse", options: { auth: { provider: new APIKeyAuthProvider({ keys: [process.env.API_KEY], headerName: "X-API-Key" // Optional (default: "X-API-Key") }) } } } });

客户端必须在 X-API-Key 标头中包含有效的 API 密钥:

X-API-Key: your-api-key

自定义身份验证

您可以通过实现AuthProvider接口来实现自己的身份验证提供程序:

import { AuthProvider, AuthResult } from "mcp-framework"; import { IncomingMessage } from "node:http"; class CustomAuthProvider implements AuthProvider { async authenticate(req: IncomingMessage): Promise<boolean | AuthResult> { // Implement your custom authentication logic return true; } getAuthError() { return { status: 401, message: "Authentication failed" }; } }

执照

麻省理工学院

-
security - not tested
F
license - not found
-
quality - not tested

用于构建模型上下文协议 (MCP) 服务器的 TypeScript 框架,可自动发现和加载工具、资源和提示。

  1. Changes from Original
    1. Installation
      1. Usage
        1. Features
          1. License
            1. Features
              1. Read the full docs here
                1. Creating a repository with mcp-framework
                2. CLI Usage
                3. Development Workflow
                4. Using with Claude Desktop
                5. Building and Testing
                6. Quick Start
                7. Transport Configuration
                8. Authentication
                9. License
              ID: u9oawtxwj5