MCP Client
- agent-framework
Typescript mcp client library.
About
What is MCP Client?
MCP Client is a TypeScript implementation of a Model Context Protocol (MCP) client for LLM agents. It provides a type-safe, promise-based API to connect to MCP servers, manage their lifecycle, and interact with tools, resources, and prompts.
How to use MCP Client?
Install via npm install mcp-client. Create a mcp-config.json file to define MCP servers (e.g., memory, filesystem, bravesearch) using npx or other commands. Use the MCPConnectionManager to load the configuration, obtain MCPClient instances, and call tools or resources. The client integrates seamlessly with Claude’s native tool calling by passing tool definitions from listTools() to Anthropic’s API.
Key features of MCP Client
- Full implementation of the MCP specification
- Support for stdio and HTTP+SSE transports
- Built-in MCP server process management
- Integration with Claude's native tool calling
- Type-safe, event-based, promise-based API
- Supports all MCP operations: Resources, Tools, Prompts, Sampling
Use cases of MCP Client
- Build an LLM agent that uses a knowledge graph via the Memory server
- Enable file system operations for an AI assistant
- Add web search capabilities using the Brave Search server
- Automate browser tasks through the Puppeteer MCP server
FAQ from MCP Client
What is MCP Client and how does it work?
MCP Client is a TypeScript library that implements the Model Context Protocol, allowing LLM agents to connect to MCP servers and use their tools, resources, and prompts. It manages server processes and provides a simple API to list and call these capabilities.What transports does MCP Client support?
MCP Client supports both stdio (command-line processes) and HTTP+SSE (Server-Sent Events) transports for communicating with MCP servers.How do I integrate MCP Client with Claude?
UselistTools() to get tool definitions, then pass them to Anthropic’s Claude API as tool parameters. When Claude returns a tool call, use callTool() to execute it and send the result back to Claude.
What is the license for MCP Client?
MCP Client is licensed under the MIT License.Details
- Author
- edanyal
- GitHub stars
- 25
- Category
- agent-framework
- Repository
- edanyal/mcp-client
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 operations
- llm-app - Basic LLM app with MCP tools
- llm-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