Skip to content

Commit b979afc

Browse files
committed
feat(mcp adapter): add adapter to use mcp tools
1 parent f6448f1 commit b979afc

4 files changed

Lines changed: 33 additions & 16 deletions

File tree

backend/api/core/dependencies.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1-
from typing import Annotated
1+
from contextlib import asynccontextmanager
2+
from typing import Annotated, AsyncGenerator
23

34
from fastapi import Depends
45
from langchain_openai import ChatOpenAI
6+
from mcp import ClientSession
7+
from mcp.client.sse import sse_client
58
from sqlalchemy.ext.asyncio import AsyncEngine, create_async_engine
69

710
from api.core.config import settings
@@ -28,3 +31,14 @@ def get_engine() -> AsyncEngine:
2831

2932

3033
EngineDep = Annotated[AsyncEngine, Depends(get_engine)]
34+
35+
36+
@asynccontextmanager
37+
async def mcp_sse_client() -> AsyncGenerator[ClientSession, None]:
38+
async with sse_client(f"http://mcp:{settings.mcp_server_port}/sse") as (
39+
read_stream,
40+
write_stream,
41+
):
42+
async with ClientSession(read_stream, write_stream) as session:
43+
await session.initialize()
44+
yield session

backend/api/pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ dependencies = [
1010
"fastapi[standard]==0.115.11",
1111
"langchain==0.3.6",
1212
"langchain-community==0.3.4",
13+
"langchain-mcp-adapters>=0.0.9",
1314
"langchain-openai==0.2.3",
1415
"langfuse==2.60.2",
1516
"langgraph==0.2.39",

backend/api/routers/mcps.py

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,14 @@
1-
from contextlib import asynccontextmanager
21
from typing import Iterable
32

43
from fastapi import APIRouter
5-
from mcp import ClientSession, types
6-
from mcp.client.sse import sse_client
4+
from mcp import types
75

8-
from api.core.config import settings
6+
from api.core.dependencies import mcp_sse_client
97
from shared_mcp.models import ToolRequest
108

119
router = APIRouter(prefix="/mcps", tags=["mcps"])
1210

1311

14-
@asynccontextmanager
15-
async def mcp_sse_client():
16-
async with sse_client(f"http://mcp:{settings.mcp_server_port}/sse") as (
17-
read_stream,
18-
write_stream,
19-
):
20-
async with ClientSession(read_stream, write_stream) as session:
21-
await session.initialize()
22-
yield session
23-
24-
2512
@router.get("/list-tools")
2613
async def list_tools() -> Iterable[types.Tool]:
2714
"""

backend/api/uv.lock

Lines changed: 15 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)