front_api list_mcp_available_tools
This commit is contained in:
@@ -23,6 +23,10 @@ from lang_agent.front_api.build_server_utils import (
|
|||||||
GRAPH_BUILD_FNCS,
|
GRAPH_BUILD_FNCS,
|
||||||
update_pipeline_registry,
|
update_pipeline_registry,
|
||||||
)
|
)
|
||||||
|
from lang_agent.components.client_tool_manager import (
|
||||||
|
ClientToolManager,
|
||||||
|
ClientToolManagerConfig,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class GraphConfigUpsertRequest(BaseModel):
|
class GraphConfigUpsertRequest(BaseModel):
|
||||||
@@ -154,6 +158,12 @@ class McpConfigUpdateResponse(BaseModel):
|
|||||||
tool_keys: List[str]
|
tool_keys: List[str]
|
||||||
|
|
||||||
|
|
||||||
|
class McpAvailableToolsResponse(BaseModel):
|
||||||
|
available_tools: List[str] = Field(default_factory=list)
|
||||||
|
errors: List[str] = Field(default_factory=list)
|
||||||
|
servers: Dict[str, Dict[str, Any]] = Field(default_factory=dict)
|
||||||
|
|
||||||
|
|
||||||
app = FastAPI(
|
app = FastAPI(
|
||||||
title="Front APIs",
|
title="Front APIs",
|
||||||
description="Manage graph configs and launch graph pipelines.",
|
description="Manage graph configs and launch graph pipelines.",
|
||||||
@@ -195,6 +205,7 @@ async def root():
|
|||||||
"/v1/pipelines/api-keys/{api_key} (DELETE) - delete API key routing policy",
|
"/v1/pipelines/api-keys/{api_key} (DELETE) - delete API key routing policy",
|
||||||
"/v1/tool-configs/mcp (GET)",
|
"/v1/tool-configs/mcp (GET)",
|
||||||
"/v1/tool-configs/mcp (PUT)",
|
"/v1/tool-configs/mcp (PUT)",
|
||||||
|
"/v1/tool-configs/mcp/tools (GET)",
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -459,6 +470,38 @@ async def update_mcp_tool_config(body: McpConfigUpdateRequest):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@app.get("/v1/tool-configs/mcp/tools", response_model=McpAvailableToolsResponse)
|
||||||
|
async def list_mcp_available_tools():
|
||||||
|
try:
|
||||||
|
_read_mcp_config_raw()
|
||||||
|
manager = ClientToolManager(
|
||||||
|
ClientToolManagerConfig(mcp_config_f=MCP_CONFIG_PATH)
|
||||||
|
)
|
||||||
|
servers = await manager.aget_tools_by_server()
|
||||||
|
available_tools = sorted(
|
||||||
|
{
|
||||||
|
tool_name
|
||||||
|
for server_info in servers.values()
|
||||||
|
for tool_name in server_info.get("tools", [])
|
||||||
|
}
|
||||||
|
)
|
||||||
|
errors = [
|
||||||
|
f"{server_name}: {server_info.get('error')}"
|
||||||
|
for server_name, server_info in servers.items()
|
||||||
|
if server_info.get("error")
|
||||||
|
]
|
||||||
|
except ValueError as e:
|
||||||
|
raise HTTPException(status_code=400, detail=str(e))
|
||||||
|
except Exception as e:
|
||||||
|
raise HTTPException(status_code=500, detail=str(e))
|
||||||
|
|
||||||
|
return McpAvailableToolsResponse(
|
||||||
|
available_tools=available_tools,
|
||||||
|
errors=errors,
|
||||||
|
servers=servers,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@app.get("/v1/pipelines", response_model=PipelineListResponse)
|
@app.get("/v1/pipelines", response_model=PipelineListResponse)
|
||||||
async def list_running_pipelines():
|
async def list_running_pipelines():
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user