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
开发工作流程
- 创建你的项目:
mcp create my-mcp-server
cd my-mcp-server
- 根据需要添加工具:
mcp add tool data-fetcher
mcp add tool data-processor
mcp add tool report-generator
- 建造:
- 添加到 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}"]
}
}
}
构建和测试
- 更改你的工具
- 运行 `npm run build` 进行编译
- 服务器将在启动时自动加载您的工具
快速入门
创建工具
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 密钥:
自定义身份验证
您可以通过实现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"
};
}
}
执照
麻省理工学院