front_api list_mcp_available_tools

This commit is contained in:
2026-03-05 19:31:41 +08:00
parent ddfda10700
commit eb7e85e4e6

View File

@@ -23,6 +23,10 @@ from lang_agent.front_api.build_server_utils import (
GRAPH_BUILD_FNCS,
update_pipeline_registry,
)
from lang_agent.components.client_tool_manager import (
ClientToolManager,
ClientToolManagerConfig,
)
class GraphConfigUpsertRequest(BaseModel):
@@ -154,6 +158,12 @@ class McpConfigUpdateResponse(BaseModel):
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(
title="Front APIs",
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/tool-configs/mcp (GET)",
"/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)
async def list_running_pipelines():
try: