feat(gateway): GET /api/tools with capability metadata
This commit is contained in:
parent
fa58e4d2f6
commit
119df57b49
@ -820,6 +820,30 @@ pub async fn get_status(State(state): State<Arc<GatewayState>>) -> Result<Json<V
|
||||
})))
|
||||
}
|
||||
|
||||
pub async fn get_tools(State(state): State<Arc<GatewayState>>) -> Result<Json<Value>, ApiError> {
|
||||
let metrics = crate::observability::metrics::global_metrics();
|
||||
let registry = state.session_manager.tools();
|
||||
let mut entries = registry.iter();
|
||||
entries.sort_by(|(a, _), (b, _)| a.cmp(b));
|
||||
let tools: Vec<Value> = entries
|
||||
.into_iter()
|
||||
.map(|(name, tool)| {
|
||||
let source = if name.contains("__") { "mcp" } else { "builtin" };
|
||||
json!({
|
||||
"name": name,
|
||||
"description": tool.description(),
|
||||
"parameters_schema": tool.parameters_schema(),
|
||||
"source": source,
|
||||
"read_only": tool.read_only(),
|
||||
"exclusive": tool.exclusive(),
|
||||
"concurrency_safe": tool.concurrency_safe(),
|
||||
"call_count": metrics.tool_call_count(&name),
|
||||
})
|
||||
})
|
||||
.collect();
|
||||
Ok(Json(json!({ "tools": tools })))
|
||||
}
|
||||
|
||||
pub async fn get_tasks(
|
||||
State(state): State<Arc<GatewayState>>,
|
||||
Query(query): Query<LimitQuery>,
|
||||
|
||||
@ -594,6 +594,7 @@ fn build_router(state: Arc<GatewayState>) -> Router {
|
||||
.route("/api/logs", routing::get(http::get_logs))
|
||||
.route("/api/tasks", routing::get(http::get_tasks))
|
||||
.route("/api/status", routing::get(http::get_status))
|
||||
.route("/api/tools", routing::get(http::get_tools))
|
||||
.route("/api/jobs", routing::get(http::get_jobs))
|
||||
.route("/api/jobs/{id}/runs", routing::get(http::get_job_runs))
|
||||
.route("/api/memories", routing::get(http::get_memories))
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user