🌐 Easy-MCP-Use 是一个开源的TypeScript库,用于连接任意LLM到任意MCP服务器并构建具有工具访问权限的自定义代理,无需使用闭源或应用程序客户端。
💡 让开发者轻松地将任意LLM与工具如网络浏览、文件操作等连接起来,并提供完整的TypeScript支持。
| 功能 | 描述 |
|---|---|
| 🔄 易用性 | 使用仅6行TypeScript代码创建您的第一个MCP代理 |
| 🤖 LLM灵活性 | 支持任何LangChain支持的LLM,这些LLM支持工具调用(如OpenAI、Anthropic、Groq、LLama等) |
| 🌐 HTTP支持 | 直接连接到运行在特定HTTP端口上的MCP服务器 |
| ⚙️ 动态服务器选择 | TODO 代理可以从可用池中动态选择最适合给定任务的MCP服务器 |
| 🧩 多服务器支持 | TODO 在单个代理中同时使用多个MCP服务器 |
| 🛡️ 工具限制 | TODO 限制潜在危险的工具,如文件系统或网络访问 |
| 📝 类型安全 | TODO 提供完整的TypeScript支持,包括所有API和配置的类型定义 |
通过npm安装:
npm install easy-mcp-use
或者从源码安装:
git clone https://github.com/dforel/easy-mcp-use.git
cd easy-mcp-use
npm install
npm run build
easy-mcp-use通过LangChain与各种LLM提供商进行交互。您需要安装适合您所选LLM的LangChain提供商包。例如:
# 对于OpenAI
npm install @langchain/openai
# 对于Anthropic
npm install @langchain/anthropic
# 对于其他提供商,请参阅[LangChain聊天模型文档](https://js.langchain.com/docs/integrations/chat/)
并将您的API密钥添加到.env文件中。
OPENAI_API_KEY=
ANTHROPIC_API_KEY=
重要:只能使用具有工具调用能力的模型。确保您选择的模型支持函数调用或工具使用。
import { MCPClient } from 'easy-mcp-use';
import { MCPAgent, MCPAgentOptions } from 'easy-mcp-use';
import { ChatOpenAI } from '@langchain/openai';
import dotenv from 'dotenv';
dotenv.config();
const openAIApiKey = process.env.openRouteApiKey;
if (!openAIApiKey) {
throw new Error("openAIApiKey环境变量未设置");
}
console.log(`openAIApiKey: ${openAIApiKey}`);
async function main() {
let config = {"mcpServers": {"http": {"url": "http://localhost:3001/sse"}}}
// 从配置文件创建客户端
const client = MCPClient.fromConfig( config );
try {
const chat = new ChatOpenAI(
{
modelName: 'google/gemini-2.0-flash-exp:free',
streaming: true,
openAIApiKey: openAIApiKey,
configuration: {
baseURL: 'https://openrouter.ai/api/v1',
}
}
);
let options = {
client: client,
// verbose: true,
maxSteps: 30,
llm: chat,
}
let agent = new MCPAgent(options)
let result = agent.run(
`
100人民币可以兑换多少美元?
`
);
console.log( JSON.stringify(result) );
} finally {
// console.info('finally');
}
}
main().catch(console.error);
您也可以从配置文件中添加服务器配置,如下所示:
const client = MCPClient.fromConfigFile(
path.join(__dirname, 'browser_mcp.json')
);
示例配置文件(browser_mcp.json):
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest"],
"env": {
"DISPLAY": ":1"
}
}
}
}
有关其他设置、模型等,请参阅文档。
有一个示例项目: easy-mcp-use-example (https://github.com/dforel/easy-mcp-use-examples)
import { MCPClient } from '../src/client';
import path from 'path';
import { MCPAgent, MCPAgentOptions } from '../src/agents/mcpagent';
// import { ChatOpenAI } from 'langchain/core/language_models/chat_openai';
// import { OpenAI } from "@langchain/llms/openai";
import { ChatOpenAI } from '@langchain/openai';
import { logger } from '../src/logging';
import dotenv from 'dotenv';
dotenv.config();
const openAIApiKey = process.env.openAIApiKey;
if (!openAIApiKey) {
throw new Error("openAIApiKey环境变量未设置");
}
logger.info(`openAIApiKey: ${openAIApiKey}`);
async function main() {
// 从配置文件创建客户端
const client = await MCPClient.fromConfigFile(
path.resolve(__dirname, './browser_mcp.json')
);
try {
const chat = new ChatOpenAI(
{
modelName: 'google/gemini-2.0-flash-exp:free',
// modelName: 'google/gemini-2.5-pro-exp-03-25:free',
streaming: true,
openAIApiKey: openAIApiKey,
configuration: {
baseURL: 'https://openrouter.ai/api/v1',
}
}
);
let options: MCPAgentOptions = {
client: client,
verbose: true,
maxSteps: 30,
llm: chat,
}
let agent = new MCPAgent(options)
let result = agent.run(
`
打开bing.com
点击输入框
输入easy-mcp-use
点击搜索
`
);
console.log( JSON.stringify(result) );
} finally {
console.info('finally');
}
}
main().catch(console.error);
此示例演示了如何连接到运行在特定HTTP端口上的MCP服务器。请确保在运行此示例之前启动您的MCP服务器。
MCP-Use-TS允许使用MCPClient配置和同时连接到多个MCP服务器。这使得能够实现需要来自不同服务器的工具的复杂工作流,如网络浏览结合文件操作或3D建模。
您可以在配置文件中配置多个服务器:
{
"mcpServers": {
"airbnb": {
"command": "npx",
"args": ["-y", "@openbnb/mcp-server-airbnb", "--ignore-robots-txt"]
},
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest"],
"env": {
"DISPLAY": ":1"
}
}
}
}
MCPClient类提供了管理多个服务器连接的方法。在创建MCPAgent时,您可以提供配置了多个服务器的MCPClient。
默认情况下,代理将有权访问所有已配置服务器中的工具。如果您需要针对特定任务指定特定服务器,可以在调用agent.run()方法时指定serverName。
// 示例:手动选择特定任务的服务器
const airbnbResult = await agent.run(
'在巴塞罗那搜索Airbnb房源',
{ serverName: 'airbnb' } // 显式使用airbnb服务器
);
const googleResult = await agent.run(
'使用Google搜索找到第一结果附近的餐厅',
{ serverName: 'playwright' } // 显式使用playwright服务器
);
如果您只想查看代理的调试信息而不启用全部调试日志记录,可以在创建MCPAgent时设置verbose参数:
// 创建具有增加详细程度的代理
const agent = new MCPAgent({
llm,
client,
verbose: true // 只显示代理的调试消息
});
当您只需要看到代理的步骤和决策过程而不需要其他组件的所有低级调试信息时,这非常有用。
我们热爱贡献!请随意打开问题报告错误或提出功能请求。
如果您在研究或项目中使用了MCP-Use-TS,请引用:
@software{easy-mcp-use,
author = {dforel},
title = {Easy-MCP-Use: MCP库用于TypeScript},
year = {2025},
publisher = {GitHub},
url = {https://github.com/dforel/easy-mcp-use}
}
该项目是从mcp-use分叉而来
希望您喜欢它
MIT