MCP-Client
-
Lets build a mcp client with langchain as client library which uses both llm and mcp tools
-
Lets create a new project
uv init
uv add mcp[cli] httpx
uv add langchain langchain-google-vertexai
uv add langchain-mcp-adapters
- Create a server.py with the following
from mcp.server.fastmcp import FastMCP
# creating a server
mcp = FastMCP("hello-mcp")
# define tools
@mcp.tool()
def add(a:int|float, b:int|float) -> int|float:
"""This method adds two numbers
Args:
a (int | float): number
b (int | float): number
Returns:
int|float: a + b
"""
return a + b
@mcp.tool()
def subtract(a:int|float, b:int|float) -> int|float:
"""This method subtracts two numbers
Args:
a (int | float): number
b (int | float): number
Returns:
int|float: a - b
"""
return a - b
@mcp.tool()
def multiply(a:int|float, b:int|float) -> int|float:
"""This method multiplies two numbers
Args:
a (int | float): number
b (int | float): number
Returns:
int|float: a * b
"""
return a * b
@mcp.tool()
def divide(a:int|float, b:int|float) -> int|float:
"""This method divides two numbers
Args:
a (int | float): number
b (int | float): number
Returns:
int|float: a / b
"""
return a / b
@mcp.tool()
def mod(a:int|float, b:int|float) -> int|float:
"""This method returns the remainder of a divided by b
Args:
a (int | float): number
b (int | float): number
Returns:
int|float: a % b
"""
return a % b
if __name__ == "__main__":
mcp.run(transport="stdio")
- Using mcp tools from langchain (for this lets create a notebook) Refer Here for all the changes
- For client i.e. main.py using stdio
import asyncio
from langchain_mcp_adapters.client import MultiServerMCPClient
from langchain.agents import create_agent
from langchain.chat_models import init_chat_model
async def main():
# create a client
client = MultiServerMCPClient({
"hello-mcp": {
"transport": "stdio",
"command": "python",
"args": ["C:\\khajaclassroom\\GenerativeAI\\agenticai\\dec25\\mcp\\langchain_mcp_client\\server.py"]
}
})
tools = await client.get_tools()
# for tool in tools:
# print(tool)
llm = init_chat_model("gemini-2.5-flash-lite", model_provider="google_vertexai")
agent = create_agent(model=llm, tools=tools)
result = await agent.ainvoke({
"messages" : [
{
"role": "user",
"content": "What is 2 + 2?"
}
]
})
#print(result)
for message in result["messages"]:
print(message.content)
if __name__ == "__main__":
asyncio.run(main())
- Refer Here for client code
