what is MCP Client?
MCP Client is a TypeScript library that implements the Model Context Protocol (MCP) for LLM agents, enabling seamless communication and tool integration.
how to use MCP Client?
To use MCP Client, install it via npm and create a configuration file to connect to various MCP servers. You can then utilize the MCPConnectionManager to manage connections and interact with tools.
key features of MCP Client?
- Full implementation of the MCP specification
- Support for stdio and HTTP+SSE transports
- Built-in MCP server process management
- Type-safe API with event-based architecture
- Promise-based async/await API
- Support for all MCP operations including resources, tools, prompts, and sampling.
use cases of MCP Client?
- Integrating with various MCP servers for knowledge graph operations.
- Building applications that utilize LLM tools for enhanced functionality.
- Managing multiple MCP server connections efficiently.
FAQ from MCP Client?
- What is the MCP Client used for?
The MCP Client is used for implementing the Model Context Protocol in applications that require interaction with LLM agents and various tools.
- Is MCP Client easy to integrate?
Yes! It is designed for easy integration with existing TypeScript applications.
- Can I contribute to MCP Client?
Absolutely! Contributions are welcome, and you can submit a Pull Request.
MCP Client
A TypeScript implementation of a Model Context Protocol (MCP) client for LLM agents.
Installation
npm install mcp-client
Features
- Full implementation of the MCP specification
- Support for both stdio and HTTP+SSE transports
- Built-in MCP server process management
- Integration with Claude's native tool calling
- Type-safe API
- Event-based architecture
- Promise-based async/await API
- Support for all MCP operations:
- Resources
- Tools
- Prompts
- Sampling
Usage
Using with MCP Servers
The most common way to use MCP Client is with standard MCP servers via npx. Create a configuration file (mcp-config.json
):
{
"mcpServers": {
"memory": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-memory"
]
},
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/path/to/allowed/directory"
]
},
"brave-search": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-brave-search"
],
"env": {
"BRAVE_API_KEY": "your-api-key"
}
}
}
}
Then use the MCPConnectionManager to connect to your servers:
import { MCPConnectionManager } from 'mcp-client';
const manager = new MCPConnectionManager();
await manager.initialize('./mcp-config.json');
// Get clients for specific servers
const memoryClient = manager.getClient('memory');
const fsClient = manager.getClient('filesystem');
// Use tools from the servers
const memoryTools = await memoryClient?.listTools();
const fsTools = await fsClient?.listTools();
// Clean up when done
await manager.cleanup();
Integration with Claude
The client is designed to work seamlessly with Claude's native tool calling:
import { Anthropic } from '@anthropic-ai/sdk';
import { MCPConnectionManager } from 'mcp-client';
// Initialize Claude and MCP
const anthropic = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });
const manager = new MCPConnectionManager();
await manager.initialize('./mcp-config.json');
// Get a client
const memoryClient = manager.getClient('memory');
const tools = await memoryClient?.listTools();
// Use with Claude
const response = await anthropic.messages.create({
model: 'claude-3-sonnet-20240229',
max_tokens: 1024,
messages: [{ role: 'user', content: 'your prompt' }],
tools: tools?.map(tool => ({
name: tool.name,
description: tool.description || '',
parameters: tool.inputSchema
}))
});
// Handle tool calls
if (!response.content[0].text && response.content[0].type === 'tool_call') {
const toolCall = response.content[0].tool_calls[0];
const result = await memoryClient?.callTool(
toolCall.name,
toolCall.parameters
);
// Send result back to Claude...
}
Low-level Usage
If you need more control, you can use the client directly:
import { MCPClient, StdioTransport } from 'mcp-client';
// Create a transport
const transport = new StdioTransport();
// Create and connect client
const client = new MCPClient({ transport });
await client.connect();
// List available tools
const tools = await client.listTools();
// Call a tool
const result = await client.callTool('tool-name', {
// tool parameters
});
Available MCP Servers
Common MPC servers available via npx:
@modelcontextprotocol/server-memory
- Knowledge graph operations@modelcontextprotocol/server-filesystem
- File system operations@modelcontextprotocol/server-brave-search
- Web search capabilities@modelcontextprotocol/server-puppeteer
- Web automation@modelcontextprotocol/server-fetch
- HTTP requests- And many more...
Examples
Check the /examples
directory for complete examples:
memory-app
- Using the Memory Server for knowledge graph operationsllm-app
- Basic LLM app with MCP toolsllm-app-tools
- Advanced LLM app with Claude native tool calling
API Reference
MCPConnectionManager
class MCPConnectionManager {
initialize(configPath: string): Promise<void>;
getClient(serverName: string): MCPClient | undefined;
cleanup(): Promise<void>;
}
MCPClient
class MCPClient {
constructor(options: MCPClientOptions);
// Connection
connect(): Promise<void>;
close(): Promise<void>;
// Tools
listTools(): Promise<Tool[]>;
callTool(name: string, params: Record<string, any>): Promise<any>;
// Resources
listResources(): Promise<Resource[]>;
readResource(uri: string): Promise<string | Buffer>;
// Prompts
listPrompts(): Promise<Prompt[]>;
getPrompt(name: string, args?: Record<string, any>): Promise<string>;
}
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
MIT