π MCP Client is the open-source way to connect any LLM to any MCP server in TypeScript/Node.js, letting you build custom agents with tool access without closed-source dependencies.
π‘ Let developers easily connect any LLM via LangChain.js to tools like web browsing, file operations, 3D modeling, and more.
Feature | Description |
---|---|
π Ease of use | Create an MCP-capable agent in just a few lines of TypeScript. |
π€ LLM Flexibility | Works with any LangChain.js-supported LLM that supports tool calling. |
π HTTP Support | Direct SSE/HTTP connection to MCP servers. |
βοΈ Dynamic Server Selection | Agents select the right MCP server from a pool on the fly. |
π§© Multi-Server Support | Use multiple MCP servers in one agent. |
π‘οΈ Tool Restrictions | Restrict unsafe tools like filesystem or network. |
π§ Custom Agents | Build your own agents with LangChain.js adapter or implement new adapters. |
- Node.js 22.0.0 or higher
- npm, yarn, or pnpm (examples use pnpm)
# Install from npm
npm install mcp-use
# LangChain.js and your LLM provider (e.g., OpenAI)
npm install langchain @langchain/openai dotenv
Create a .env
:
OPENAI_API_KEY=your_api_key
import { ChatOpenAI } from '@langchain/openai'
import { MCPAgent, MCPClient } from 'mcp-use'
import 'dotenv/config'
async function main() {
// 1. Configure MCP servers
const config = {
mcpServers: {
playwright: { command: 'npx', args: ['@playwright/mcp@latest'] }
}
}
const client = MCPClient.fromDict(config)
// 2. Create LLM
const llm = new ChatOpenAI({ modelName: 'gpt-4o' })
// 3. Instantiate agent
const agent = new MCPAgent({ llm, client, maxSteps: 20 })
// 4. Run query
const result = await agent.run('Find the best restaurant in Tokyo using Google Search')
console.log('Result:', result)
}
main().catch(console.error)
You can store servers in a JSON file:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest"]
}
}
}
Load it:
import { MCPClient } from 'mcp-use'
const client = MCPClient.fromConfigFile('./mcp-config.json')
const config = {
mcpServers: {
airbnb: { command: 'npx', args: ['@openbnb/mcp-server-airbnb'] },
playwright: { command: 'npx', args: ['@playwright/mcp@latest'] }
}
}
const client = MCPClient.fromDict(config)
const agent = new MCPAgent({ llm, client, useServerManager: true })
await agent.run('Search Airbnb in Barcelona, then Google restaurants nearby')
const agent = new MCPAgent({
llm,
client,
disallowedTools: ['file_system', 'network']
})
Zane |
MIT Β© Zane