@phake/mcp
用于构建的TypeScript库 MCP(模型上下文协议) 服务器-适用于Cloudflare Workers和Node.js。
](https://www.npmjs.com/package/@phake/mcp)

______________________________________________________________________
为什么是@phake/mcp?
- 多种身份验证策略:OAuth 2.1,Google/GitHub预设,承载,API密钥,自定义头
- 加密令牌存储:AES-256-GCM处于静止状态+主动刷新
- Cloudflare Workers本机:KV存储、内存回退、零配置
- 生产就绪:CIMD验证、OAuth发现、DNS重新绑定保护
- 快速脚手架:
bun create @phake/mcp开始吧
看 比较指南 与官方SDK进行全功能比较。
______________________________________________________________________
需求
安装
bun add @phake/mcp
# or
npm install @phake/mcp______________________________________________________________________
快速启动(脚手架)
使用一个命令构建新的MCP服务器:
# Interactive (prompts for template)
bun create @phake/mcp
# With options
bun create @phake/mcp my-mcp-app --template cloudflare-workers --install可用模板:
| 模板 | 说明 |
|---|---|
cloudflare-workers | Cloudflare Workers+Hono(默认) |
cloudflare-workers-google | Cloudflare Workers+谷歌OAuth |
node-hono | Node.js+Bun+Hono |
选项:
| 选项 | 描述 |
|---|---|
-t, --template | 模板名称 |
-i, --install | 自动安装依赖项 |
-p, --pm | 包管理器: npm, bun, yarn, pnpm |
______________________________________________________________________
入门指南
1.创建KV命名空间
wrangler kv namespace create TOKENS2.将其绑定到Wrangler配置中
wrangler.toml
[[kv_namespaces]]
binding = "TOKENS"
id = ""3.生成加密密钥
openssl rand -base64 32 | tr '+/' '-_' | tr -d '='4.设置加密密钥
生产:
wrangler secret put RS_TOKENS_ENC_KEY本地开发 -添加到 .dev.vars:
RS_TOKENS_ENC_KEY=5.创造你的工人
import { createMCPServer } from "@phake/mcp";
const server = createMCPServer({
adapter: "worker",
tools: [/* your tools */],
});
export default server;有关详细设置,请参阅 入门指南.
______________________________________________________________________
用法
定义工具
import { z } from "zod";
import { defineTool } from "@phake/mcp";
const greetTool = defineTool({
name: "greet",
description: "Returns a greeting for the given name",
inputSchema: z.object({
name: z.string().describe("Name to greet"),
}),
outputSchema: z.object({
message: z.string().describe("The greeting message"),
}),
handler: async (args) => {
return { message: `Hello, ${args.name}!` };
},
});经过身份验证的工具
const profileTool = defineTool({
name: "get_profile",
description: "Fetch the authenticated user's profile",
inputSchema: z.object({}),
requiresAuth: true,
handler: async (_args, context) => {
const response = await fetch("https://api.example.com/me", {
headers: context.resolvedHeaders,
});
return await response.json();
},
});Cloudflare绑定
在您的工具中访问Cloudflare worker绑定(AI、Vectorize、D1、R2、KV等):
import { createMCPServer, defineTool, type ToolContext } from "@phake/mcp";
interface Env extends Cloudflare.Env {
AI: unknown;
VECTORIZE: unknown;
MY_BUCKET: unknown;
}
const searchTool = defineTool({
name: "search_vectors",
inputSchema: z.object({ query: z.string() }),
handler: async (args, context: ToolContext) => {
// Type-safe access to bindings
const ai = context.bindings?.AI;
const vectorize = context.bindings?.VECTORIZE;
return {
content: [{
type: "text",
text: `AI: ${!!ai}, Vectorize: ${!!vectorize}`
}]
};
},
});
const server = createMCPServer({
tools: [searchTool],
});获取用户信息(OAuth)
使用从OAuth提供程序获取用户配置文件 context.getUser():
const userTool = defineTool({
name: "get_user_info",
requiresAuth: true,
inputSchema: z.object({}),
handler: async (_, context) => {
// Get token with error handling
const { data: token, error: tokenError } = context.getToken();
if (tokenError || !token) {
return { content: [{ type: "text", text: tokenError }], isError: true };
}
// Get user info with error handling
const { data, error } = await context.getUser();
if (error || !data) {
return { content: [{ type: "text", text: error }], isError: true };
}
return {
content: [{
type: "text",
text: JSON.stringify({ email: data.email, name: data.name })
}]
};
},
});这 getUser() 方法根据以下内容自动检测提供者 AUTH_STRATEGY:
google→https://www.googleapis.com/oauth2/v2/userinfogithub→https://api.github.com/user
身份验证策略
| 策略 | 描述 |
|---|---|
oauth | 使用RS令牌的完整OAuth 2.1 PKCE流=>提供者令牌映射 |
google | 与OAuth相同,具有Google预设端点 |
github | 与OAuth相同,具有GitHub预设端点 |
bearer | 静态承载令牌 |
api_key | 通过标头的静态API密钥 |
custom | 任意自定义标题 |
none | 无身份验证 |
看 身份验证指南 详细配置。
______________________________________________________________________
API 参考
createMCPServer(options)
创建MCP服务器实例。
const server = createMCPServer({
adapter: "worker",
tools: [greetTool, profileTool],
});defineTool(def)
类型安全工具厂。看 API 参考 以获取完整的字段参考。
toolFail(defaults)
创建具有预设默认字段的键入错误工厂:
const fail = toolFail({ ok: false, items: null });
return fail("spreadsheet_id is required");
// => { ok: false, items: null, error: "spreadsheet_id is required" }内置工具
| 工具 | 输入 | 输出 | 描述 |
|---|---|---|---|
echo | { message, uppercase? } | { echoed, length } | 回复一条消息 |
health | { verbose? } | { status, timestamp, runtime, uptime? } | 报告服务器运行状况 |
包装出口
| 导出 | 路径 | 描述 |
|---|---|---|
| 核心 | @phake/mcp | defineTool, createMCPServer,助手 |
| Worker运行时 | @phake/mcp/runtime/worker | Cloudflare Workers适配器 |
| 节点运行时 | @phake/mcp/runtime/node | Node.js适配器(实验性的) |
______________________________________________________________________
贡献
# Install dependencies
bun install
# Run tests
bun test
# Type check
bun run typecheck
# Build
bun run build______________________________________________________________________
