关于 Lite_MCP_sdk
Lite_MCP_sdk 是面向 JavaScript 开发者的轻量 MCP SDK 与库,可用于构建 MCP 服务端和客户端,支持简化入门或更底层的协议控制。项目专注于 SSE,不支持 stdio。
主要功能
- 01JavaScript MCP 服务端与客户端
- 02仅支持 SSE 传输
- 03轻量 SDK,依赖较少
- 04可自定义验证逻辑
- 05提供可复制的示例
适用场景
- 01构建远程 SSE MCP 服务
- 02让 JavaScript 客户端连接 MCP 服务
- 03自定义协议验证逻辑
MCP 相关
该项目提供用于创建 MCP 服务端和客户端的 JavaScript 库。通信采用 SSE,不支持 stdio。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
简介
此仓库现在包含 2 个部分:
- 面向 javascript 的 Lite mcp sdk
- 面向 javascript 的 Lite mcp
项目目标
本项目旨在让任何只学了 5 分钟 javascript 的奶奶👵都能充分利用 AI Agent 技术。
为什么选择 javascript?
因为我希望项目聚焦于运行逻辑,而不是被类型分散注意力。
面向 javascript 的 Lite mcp 简介
面向 javascript 的 Lite mcp 是启动远程 SSE javascript MCP 服务和客户端的最佳方式。
🚀 快速开始
真正的复制并粘贴体验,助你快速开始使用 MCP。
安装
npm install litemcpjs
npm install express
npm install cors
不到 5 行代码构建一个 SSE MCP 客户端
import { MCPClient } from "litemcpjs";
async function main() {
const client = new MCPClient("http://localhost:3000") // change this to your server url
await client.connect()
await client.listTools()
const result = await client.callTool("calculate-bmi", {weightKg: 70, heightM: 1.75})
console.log(result)
}
main();
使用 expressJS 启动远程 MCP SSE 服务
const { MCPServerInit } = require("litemcpjs");
// define the tools
const TOOLS = [
{
name: "calculate-bmi",
description: "Calculate the BMI of a person",
inputSchema: {
type: "object",
properties: {
weightKg: { type: "number" },
heightM: { type: "number" },
},
required: ["weightKg", "heightM"],
},
method: async ({ weightKg, heightM }) => {
return {
content: [{
type: "text",
text: String(weightKg / (heightM * heightM))
}]
}
}
}
];
// define extra handlers for resources etc.
const handlers = {};
// compatible for server have .use(middleware) method such as express
const middlewares = [
cors(),
];
const MCPapp = express();
const MCPServer = MCPServerInit(
MCPapp,
middlewares,
handlers,
TOOLS,
).listen(5556);
面向 javascript 的 Lite mcp sdk 简介
如果你希望对 MCP 协议进行更多底层控制:
面向 javascript 的 Lite mcp sdk 是一个轻量级 MCP SDK 改编版,依赖项极少。
快速开始
npm install lite-mcp-sdk
服务端
const { Server, SSEServerTransport } = require("lite-mcp-sdk");
//or module import
import { Server, SSEServerTransport } from "lite-mcp-sdk";
//create a server
const server = new Server({
port: 3000,
transport: new SSEServerTransport(),
});
// 1. Define the server info
const server = new Server({
name: "example-servers/puppeteer",
version: "0.1.0",
}, {
capabilities: {
resources: {},
tools: {},
},
});
// 2. Define the request handlers
server.setRequestHandler("tools/call", async (request) => {
const { name, arguments: args } = request.params;
return handleToolCall(name, args);
});
//3. Define the transport
const transports = new Map();
const transport = new SSEServerTransport("/messages", res);
transports.set(clientId, transport);
//4. Connect the server to the transport
await server.connect(transport);
//5. Handle the post message
await transport.handlePostMessage(req, res);
客户端
import { Client, SSEClientTransport } from "lite-mcp-sdk";
// 1. Define the client
let client = new Client( {
name: "fastmcp-client",
version: "0.1.0"
}, {
capabilities: {
sampling: {},
roots: {
listChanged: true,
},
},
} );
// 2. Init the client transport
const serverUrl = "http://localhost:3000"; // for example
const backendUrl = new URL(`${serverUrl}/sse`);
backendUrl.searchParams.append("transportType", "sse");
backendUrl.searchParams.append("url", `${serverUrl}/sse`);
const headers = {};
const clientTransport = new SSEClientTransport(backendUrl, {
eventSourceInit: {
fetch: (url, init) => fetch(url, { ...init, headers }),
},
requestInit: {
headers,
},
});
// 3. Connect the client to the transport
await client.connect(clientTransport);
const abortController = new AbortController();
let progressTokenRef = 0;
// 4. start the tool call
const name = "toolcall name";
const params = {}; // tool call params
const response = await client.request(
{
method: "tools/call",
params: {
name,
arguments: params,
_meta: {
progressToken: progressTokenRef++,
},
},
},
{signal: abortController.signal,}
);
项目结构:
项目清晰、整洁地组织在以下目录中:
src
├── index.js
└── lib
├── client
│ ├── client.js
│ └── clientTransport.js
├── server
│ ├── server.js
│ └── serverTransport.js
└── shared
├── helpers
│ ├── constants.js
│ └── util.js
├── protocol.js
└── validators
├── capabilityValidators.js
└── schemaValidators.js (IN CONSTRUCTION)
为什么选择 lite-mcp-sdk?
1. 不再使用固定的 zod 类型
不再需要 zod 类型!!!zod 类型给简单的设置带来了不必要的复杂性。
此外,原始 SDK 中 zod 类型的用法僵化且不灵活,这是一个广受认可的问题。

2. 完整的 SSE 解决方案
专注于 SSE,出于简化考虑移除了 stdio 支持,因为 stdio 并不像 SSE 那样通用。
令人惊讶的是,网上关于 SSE 解决方案的资料很少,所以我决定自己编写一个。
下方图片显示,文档总是介绍 stdio 支持,却没有提及 SSE 支持。
即使特意搜索 SSE,结果也寥寥无几,请看 Google 搜索结果的第一页。

将 requestSchema.parse 之类的代码替换为完全可自定义的验证器,并交由用户在此定义验证逻辑。例如:
const validatedMessage = validator(message);
原始 SDK 中 timeout 的用法含糊不清,而且有一些冗余实现;Lite mcp 移除了这些实现,以免造成更多困惑。(好吧,我觉得他们在最新版本中也移除了这些内容。)
3. 提供更详细的文档,帮助快速上手
他们实际上已在官方路线图中列出了这个问题。哈哈

Lite MCP SDK 提供了更好的文档,介绍如何使用和修改 SDK,并附有更多可直接复制的代码示例。
4. 仅保留核心功能的精简架构
Lite MCP SDK:
src
├── index.js
└── lib
├── client
│ ├── client.js
│ └── clientTransport.js
├── server
│ ├── server.js
│ └── serverTransport.js
└── shared
├── helpers
│ ├── constants.js
│ └── util.js
├── protocol.js
└── validators
├── capabilityValidators.js
└── schemaValidators.js (IN CONSTRUCTION)
官方 SDK:
虽然它列在路线图中,但我认为在这个项目中加入身份验证是糟糕的产品设计。
说实话,我认为让用户自行处理身份验证问题能提供更大的灵活性和更好的开发体验。
src/
├── client
│ ├── auth.test.ts
│ ├── auth.ts
│ ├── cross-spawn.test.ts
│ ├── index.test.ts
│ ├── index.ts
│ ├── sse.test.ts
│ ├── sse.ts
│ ├── stdio.test.ts
│ ├── stdio.ts
│ └── websocket.ts
├── cli.ts
├── inMemory.test.ts
├── inMemory.ts
├── integration-tests
│ └── process-cleanup.test.ts
├── server
│ ├── auth
│ │ ├── clients.ts
│ │ ├── errors.ts
│ │ ├── handlers
│ │ │ ├── authorize.test.ts
│ │ │ ├── authorize.ts
│ │ │ ├── metadata.test.ts
│ │ │ ├── metadata.ts
│ │ │ ├── register.test.ts
│ │ │ ├── register.ts
│ │ │ ├── revoke.test.ts
│ │ │ ├── revoke.ts
│ │ │ ├── token.test.ts
│ │ │ └── token.ts
│ │ ├── middleware
│ │ │ ├── allowedMethods.test.ts
│ │ │ ├── allowedMethods.ts
│ │ │ ├── bearerAuth.test.ts
│ │ │ ├── bearerAuth.ts
│ │ │ ├── clientAuth.test.ts
│ │ │ └── clientAuth.ts
│ │ ├── provider.ts
│ │ ├── router.test.ts
│ │ ├── router.ts
│ │ └── types.ts
│ ├── completable.test.ts
│ ├── completable.ts
│ ├── index.test.ts
│ ├── index.ts
│ ├── mcp.test.ts
│ ├── mcp.ts
│ ├── sse.ts
│ ├── stdio.test.ts
│ └── stdio.ts
├── shared
│ ├── auth.ts
│ ├── protocol.test.ts
│ ├── protocol.ts
│ ├── stdio.test.ts
│ ├── stdio.ts
│ ├── transport.ts
│ ├── uriTemplate.test.ts
│ └── uriTemplate.ts
└── types.ts
主要差异表
| 功能 | mcp-official-sdk | lite-mcp-sdk |
|---|---|---|
| 验证 | zod | Validators |
| 传输方式 | stdio 或 SSE | 仅 SSE |
| 语言 | typescript | javascript |
| 身份验证 | 内置 | 可选 |
| 文档 | 含糊不清 | 清晰 |
| 架构 | 复杂 | 轻量 |
🗺️ 路线图
- 自定义验证器(正在开发中)
- 添加用于监控和管理 MCP 服务和客户端的仪表板
- 添加 ts 类型
- 添加 python SDK
🤝 参与贡献
欢迎贡献!请提交 issue 或 pull request。
请阅读贡献指南。
📝 许可
本项目采用 MIT 许可证。详情请参阅 LICENSE 文件。
灵感来自原始 anthropic sdk,其许可证也包含在此处。
联系方式
如有任何问题或建议,请在此处留言。 或者通过电子邮件联系我:[email protected]
使用 lite-mcp-sdk 的项目(待添加)
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。
