File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1- from typing import Annotated
1+ from contextlib import asynccontextmanager
2+ from typing import Annotated , AsyncGenerator
23
34from fastapi import Depends
45from langchain_openai import ChatOpenAI
6+ from mcp import ClientSession
7+ from mcp .client .sse import sse_client
58from sqlalchemy .ext .asyncio import AsyncEngine , create_async_engine
69
710from api .core .config import settings
@@ -28,3 +31,14 @@ def get_engine() -> AsyncEngine:
2831
2932
3033EngineDep = 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
Original file line number Diff line number Diff 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" ,
Original file line number Diff line number Diff line change 1- from contextlib import asynccontextmanager
21from typing import Iterable
32
43from 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
97from shared_mcp .models import ToolRequest
108
119router = 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" )
2613async def list_tools () -> Iterable [types .Tool ]:
2714 """
You can’t perform that action at this time.
0 commit comments