Files
kebab/crates/kebab-mcp/tests/initialize.rs
th-kim0823 360fa53b02 feat(kebab-mcp): doctor tool (fb-30)
Second tool — `doctor` (no input args, returns doctor.v1 JSON via
kebab_app::doctor_with_config_path). Mirrors schema tool's manual-dispatch
pattern: Tool::new entry in list_tools, match arm in call_tool, per-tool
module in tools/doctor.rs.

doctor_with_config_path takes Option<&Path> (not &Config), so KebabAppState
is extended with config_path: Option<PathBuf>. All existing callers
(initialize.rs, tools_call_schema.rs, serve_stdio_async) pass None for now;
Plan Task 10 (Cmd::Mcp wiring) will thread the actual --config path through.
doctor_with_config falls back to XDG default when config_path is None —
same behavior as bare `kebab doctor`.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 15:41:13 +09:00

20 lines
653 B
Rust

//! Integration: KebabHandler::get_info returns correct kebab serverInfo.
//! Doesn't exercise full transport — that lands when we have at least
//! one tool to call (Task 4+).
use kebab_config::Config;
use kebab_mcp::{KebabAppState, KebabHandler};
use rmcp::ServerHandler;
#[tokio::test]
async fn initialize_returns_kebab_server_info() {
let cfg = Config::defaults();
let state = KebabAppState::new(cfg, None);
let handler = KebabHandler::new(state);
let info = handler.get_info();
assert_eq!(info.server_info.name, "kebab");
assert!(!info.server_info.version.is_empty());
assert!(info.capabilities.tools.is_some());
}