为 Claude / OpenAI 代理打造生产级工具?这开源 SDK 专治各种不服

71 阅读5分钟

为 Claude / OpenAI 代理打造生产级工具?这开源 SDK 专治各种不服

专为后端/全栈开发者、AI 代理构建者和初创团队设计

你是否正在为 AI 代理(如 Claude、ChatGPT 或自定义 Agent)集成外部工具而烦恼?定义工具 schema 不难,但一到生产环境,就要面对认证、多租户、用户交互(elicitation)、审计日志等一系列复杂问题。结果往往是:原型几天搞定,上线却遥遥无期。

2025 年底,Model Context Protocol (MCP) 协议生态已经非常成熟。Anthropic 主推,OpenAI Agent Kit 默认支持,最新 spec 还引入了更强的安全规范和 UI 扩展。但官方实现偏底层,生产级特性需要自己从零造。这时,LeanMCP 的开源 TypeScript SDKleanmcp-sdk)就脱颖而出——它以极致的开发者体验为核心,提供类型安全装饰器、开箱即用的认证和 CLI 工具,帮助你快速构建可靠的 MCP 服务器。

这个仓库(github.com/LeanMCP/lea…) 截至 2025 年 12 月 15 日仍有活跃 commit,采用 MIT 许可,完全免费开源。下面我们一步步来看它到底能为你带来什么价值。

MCP 协议快速背景

MCP(Model Context Protocol)是一种让 AI 代理安全、双向连接外部工具、提示和资源的开源协议。它为 AI 提供“标准化接口”:工具的调用方式、参数 schema、描述、甚至用户交互流程都清晰定义。

2025 年,MCP 已成为 AI 工具集成的事实标准:

  • Anthropic 的 Claude 默认支持
  • OpenAI 的 Agent Kit 内置兼容
  • 支持流式响应、elicitation(工具执行中征求用户输入)、structured outputs 等高级特性

但生产环境远不止定义几个工具。认证、权限、多租户、日志、可观测性……这些才是真正耗时的部分。LeanMCP SDK 正是针对这些痛点设计的。

LeanMCP SDK 核心价值:谁能受益?

这个 SDK 专为 TypeScript/Node.js 开发者打造,强调 DX first(开发者体验优先)类型安全生产就绪

后端/全栈工程师

如果你正在为 AI 应用连接数据库、外部 API 或 SaaS 服务(Stripe、Notion 等),LeanMCP 的装饰器风格能让你少写 80% 样板代码。类型安全 + 自动 schema 生成,编译期就能捕获错误。

AI 代理构建者

想让自己的工具被 OpenAI、Anthropic 等大模型调用?SDK 支持最新 MCP spec,直接暴露工具、提示和资源,支持 elicitation 和流式响应。

企业级应用开发者

内置 @leanmcp/auth 包,支持 Auth0、Supabase、Cognito、Firebase 等主流认证提供商。开箱即用多租户、API keys、权限控制和审计日志。

初创团队或独立开发者

通过 CLI 几分钟搭建项目原型,支持快速迭代。leanmcp createleanmcp add 命令自动生成 boilerplate,适合 MVP 开发。

核心特性一览

  • 类型安全装饰器(@Tool@Prompt@Resource
  • 自动服务发现(放在 mcp/ 目录即可)
  • 内置 HTTP 服务器(健康检查、CORS、日志)
  • 认证装饰器 @Authenticated
  • Elicitation、审计、可观测性支持
  • CLI 驱动开发流程

实战演示:10 分钟搭建你的第一个 MCP 服务器

我们用真实代码(直接来自仓库 README)来演示。整个过程无需虚构,所有示例均来自官方。

1. 安装 CLI 并创建项目

npx @leanmcp/cli create my-mcp-server
cd my-mcp-server
npm install

这会生成标准项目结构:

my-mcp-server/
├── main.ts              # 入口文件
├── package.json
├── tsconfig.json
└── mcp/                 # 服务目录
    └── example/
        └── index.ts     # 示例服务

2. 定义一个带 schema 验证的工具(情感分析示例)

mcp/example/index.ts 中(仓库生成的 boilerplate):

import { Tool, Optional, SchemaConstraint } from "@leanmcp/core";

// 输入 schema
class AnalyzeSentimentInput {
  @SchemaConstraint({
    description: 'Text to analyze',
    minLength: 1
  })
  text!: string;

  @Optional()
  @SchemaConstraint({
    description: 'Language code',
    enum: ['en', 'es', 'fr', 'de'],
    default: 'en'
  })
  language?: string;
}

// 输出 schema
class AnalyzeSentimentOutput {
  @SchemaConstraint({ enum: ['positive', 'negative', 'neutral'] })
  sentiment!: string;

  @SchemaConstraint({ minimum: -1, maximum: 1 })
  score!: number;

  @SchemaConstraint({ minimum: 0, maximum: 1 })
  confidence!: number;
}

export class SentimentService {
  @Tool({ 
    description: 'Analyze sentiment of text',
    inputClass: AnalyzeSentimentInput
  })
  async analyzeSentiment(args: AnalyzeSentimentInput): Promise<AnalyzeSentimentOutput> {
    const sentiment = this.detectSentiment(args.text);
    return {
      sentiment: sentiment > 0 ? 'positive' : sentiment < 0 ? 'negative' : 'neutral',
      score: sentiment,
      confidence: Math.abs(sentiment)
    };
  }

  private detectSentiment(text: string): number {
    const positiveWords = ['good', 'great', 'excellent', 'amazing', 'love'];
    const negativeWords = ['bad', 'terrible', 'awful', 'horrible', 'hate'];
    let score = 0;
    const words = text.toLowerCase().split(/\s+/);
    words.forEach(word => {
      if (positiveWords.includes(word)) score += 0.3;
      if (negativeWords.includes(word)) score -= 0.3;
    });
    return Math.max(-1, Math.min(1, score));
  }
}

3. 简单工具示例(加法计算)

class AddInput {
  @SchemaConstraint({ description: 'First number' })
  a!: number;

  @SchemaConstraint({ description: 'Second number' })
  b!: number;
}

@Tool({
  description: 'Calculate sum of two numbers',
  inputClass: AddInput
})
async add(input: AddInput): Promise<{ result: number }> {
  return { result: input.a + input.b };
}

4. 带认证的生产级工具(Slack 发送消息 + Cognito)

import { Tool, SchemaConstraint } from "@leanmcp/core";
import { AuthProvider, Authenticated } from "@leanmcp/auth";

const authProvider = new AuthProvider('cognito', {
  region: process.env.AWS_REGION,
  userPoolId: process.env.COGNITO_USER_POOL_ID,
  clientId: process.env.COGNITO_CLIENT_ID
});

await authProvider.init();

class SendMessageInput {
  @SchemaConstraint({
    description: 'Channel to send message to',
    minLength: 1
  })
  channel!: string;

  @SchemaConstraint({
    description: 'Message text',
    minLength: 1
  })
  text!: string;
}

@Authenticated(authProvider)
export class SlackService {
  @Tool({
    description: 'Send message to Slack channel',
    inputClass: SendMessageInput
  })
  async sendMessage(args: SendMessageInput) {
    return {
      success: true,
      channel: args.channel,
      timestamp: Date.now().toString()
    };
  }
}

5. 启动服务器(main.ts)

import { createHTTPServer } from "@leanmcp/core";

await createHTTPServer({
  name: "my-mcp-server",
  version: "1.0.0",
  port: 8080,
  cors: true,
  logging: true
});

运行 npm run dev,你的 MCP 服务器就在 /mcp 端点就绪,支持健康检查 /health

用 MCP Inspector 或直接连接 Claude/ChatGPT 测试工具调用即可。

与其他方案对比

官方 MCP TypeScript 实现更底层,需要手动处理认证、流式等。LeanMCP SDK 在此基础上增加了生产特性(auth、CLI、auto-discovery),开发者体验大幅提升。LeanMCP SDK 是当前最注重开发者体验的 MCP 构建工具,尤其适合需要快速上线生产级工具的后端团队和初创开发者。

现在就试试

  • Star 仓库:github.com/LeanMCP/lea…
  • 运行 npx @leanmcp/cli create test-mcp 搭建你的第一个服务器
  • 有问题欢迎提 Issue 或贡献代码

MCP 生态正在快速演进,LeanMCP 值得你关注。动手试试吧,生产级 MCP 服务器其实没那么难!