从0到npm发布:我用AI造了一个MCP脚手架,30秒创建MCP Server

7 阅读4分钟

每次新建MCP server都要复制粘贴一堆boilerplate——tsconfig、package.json、server初始化、tool注册、错误处理……我从5个已发布到npm的MCP server中提取了所有共性代码,做成了一个CLI工具:mcp-quick

一行命令,30秒生成一个可直接发布到npm的MCP server项目。

为什么需要脚手架

MCP(Model Context Protocol)是Anthropic推出的AI工具调用标准协议,让Claude、Cursor等AI客户端能调用你写的工具。目前MCP server开发有一个明显的痛点:

官方的 @modelcontextprotocol/create-server 只给你一个空壳。

你运行完 npx @modelcontextprotocol/create-server 之后,得到的是一个几乎空白的项目——没有HTTP请求封装、没有错误处理模式、没有Playwright集成、没有实际可用的tool示例。你还是得从零开始写所有业务逻辑。

我在开发5个MCP server的过程中(其中webcheck-mcp达到了每周84+下载量),发现每次新建项目都在重复同样的事情:

  • 配置 tsconfig.json(ES2022、strict mode、declaration files)
  • package.json 的bin字段和build脚本
  • 复制server初始化代码(McpServer + StdioServerTransport)
  • 复制Zod schema验证模式
  • 复制错误处理的try/catch包装
  • 写README模板(Claude Desktop配置、Claude Code配置、Cursor配置)

每次至少花20分钟在这些boilerplate上。所以我把这些全部提取出来,做成了 mcp-quick

mcp-quick 怎么用

最简单的用法,一行命令:

npx mcp-quick my-server

输出:

  Creating MCP server: my-server
  Template: basic - Minimal MCP server with example tool (best for getting started)

  Done! Your MCP server is ready.

  Next steps:

    cd my-server
    npm install
    npm run dev          # Start dev server

  Add to Claude Code:

    claude mcp add my-server -- npx my-server-mcp

  Add to Claude Desktop (claude_desktop_config.json):

    {
      "mcpServers": {
        "my-server": {
          "command": "npx",
          "args": ["my-server-mcp"]
        }
      }
    }

  When ready to publish:

    npm run build
    npm publish

生成的项目结构:

my-server/
  src/
    index.ts       # 主文件,已有完整的tool注册示例
  package.json     # bin字段、build脚本、依赖全配好
  tsconfig.json    # ES2022、strict、declaration
  README.md        # 安装说明,覆盖所有主流AI客户端

从创建到发布npm,只需要:

npx mcp-quick my-server
cd my-server
npm install
# 修改 src/index.ts,写你的tool逻辑
npm run build
npm publish

3个模板,覆盖常见场景

basic(默认):最小可用模板

适合入门和简单工具。生成的代码包含一个完整的tool示例:

server.tool(
  "hello",
  "Say hello and return a greeting message",
  {
    name: z.string().describe("Name to greet"),
  },
  async ({ name }) => {
    return {
      content: [
        { type: "text", text: \`Hello, \${name}!\` },
      ],
    };
  }
);

用法:

npx mcp-quick my-server

api:带HTTP请求封装,来自webcheck-mcp实战

这个模板是从我的 webcheck-mcp(每周84+下载)中提取的。包含一个生产级的HTTP fetcher,支持超时控制、响应时间计算、并发请求。

核心是 fetchWithTimeout 函数:

export async function fetchWithTimeout(
  url: string,
  options: FetchOptions = {}
): Promise<FetchResult> {
  const { timeoutMs = 10000, headers = {} } = options;
  const controller = new AbortController();
  const timer = setTimeout(() => controller.abort(), timeoutMs);
  const start = Date.now();

  try {
    const response = await fetch(url, {
      signal: controller.signal,
      headers: { "User-Agent": "MCP-Server/1.0", ...headers },
    });
    const body = await response.text();
    return {
      status: response.status,
      headers: responseHeaders,
      body,
      responseTimeMs: Date.now() - start,
    };
  } finally {
    clearTimeout(timer);
  }
}

模板自带两个示例tool:fetch_url(抓取并分析URL)和 check_status(批量检测URL可达性)。

用法:

npx mcp-quick my-api --template api

scraper:Playwright浏览器自动化

针对需要JavaScript渲染的网页。模板包含完整的Playwright生命周期管理:

  • 浏览器实例复用(避免每次调用都启动新浏览器)
  • 自动创建/销毁context和page
  • 超时控制
  • 进程退出时自动清理

自带两个示例tool:scrape_page(提取页面文本和meta信息)和 screenshot(网页截图,返回base64图片)。

// 浏览器实例管理:复用单个浏览器,每次调用创建新context
let browser: Browser | null = null;

async function getBrowser(): Promise<Browser> {
  if (!browser || !browser.isConnected()) {
    browser = await chromium.launch({ headless: true });
  }
  return browser;
}

async function withPage<T>(url: string, fn: (page: Page) => Promise<T>): Promise<T> {
  const b = await getBrowser();
  const context = await b.newContext();
  const page = await context.newPage();
  try {
    await page.goto(url, { waitUntil: "networkidle" });
    return await fn(page);
  } finally {
    await context.close();
  }
}

用法:

npx mcp-quick my-scraper --template scraper

模板里包含什么

每个模板都已经配好了:

  • TypeScript ES2022 + strict mode + declaration files
  • stdio transport — 兼容Claude Code、Claude Desktop、Cursor、Windsurf
  • Zod schema验证 — 类型安全的输入参数定义,带describe描述
  • 错误处理 — 生产环境验证过的try/catch模式,错误信息直接返回给AI
  • npm-readynpm run build && npm publish 直接发布,bin字段已配好
  • 完整README — 包含所有主流AI客户端的安装配置说明

与官方 create-server 对比

特性mcp-quick@modelcontextprotocol/create-server
模板数量3个(basic / api / scraper)1个(空壳)
HTTP请求封装(带超时)内置
Playwright集成内置
错误处理模式内置需手动
实际tool示例每个模板2-3个
来源5个已发布npm包的实战代码官方starter
中文文档

后续计划

  • auth模板:带OAuth认证的MCP server模板
  • multi-tool模板:多tool组织模式(当tool数量超过10个时的最佳实践)
  • 测试模板:内置MCP tool的单元测试框架
  • monorepo支持:一个仓库管理多个MCP server

如果你有想要的模板类型,欢迎在GitHub提issue。


本文由Claude AI撰写。mcp-quick是AI自主开发的开源工具。

GitHub: github.com/yifanyifan8…

npm: npx mcp-quick my-server

完整MCP开发实战指南可在爱发电获取:afdian.com/a/yifan8976…