/**
* 接続管理ツール
*/
import { z } from 'zod';
import type { MTConnection } from '../types/index.js';
import {
loadConnections,
addConnection,
removeConnection,
setActiveConnection,
getActiveConnectionId,
getMTClient,
} from '../utils/connection-manager.js';
// 接続追加のスキーマ
export const addConnectionSchema = z.object({
id: z.string().describe('接続ID(一意の識別子)'),
name: z.string().describe('接続の表示名'),
endpoint: z.string().describe('Data API のエンドポイントURL(例: http://example.com/cgi-bin/mt/mt-data-api.cgi)'),
username: z.string().describe('MTユーザー名'),
password: z.string().describe('MTパスワードまたはAPIパスワード'),
});
// 接続選択のスキーマ
export const useConnectionSchema = z.object({
connectionId: z.string().describe('使用する接続のID'),
});
// 接続削除のスキーマ
export const removeConnectionSchema = z.object({
connectionId: z.string().describe('削除する接続のID'),
});
// 接続テストのスキーマ
export const testConnectionSchema = z.object({
connectionId: z.string().optional().describe('テストする接続のID(省略時はアクティブな接続)'),
});
/**
* 接続一覧を取得
*/
export async function handleListConnections() {
const connections = await loadConnections();
const activeId = getActiveConnectionId();
if (connections.length === 0) {
return {
content: [{
type: 'text' as const,
text: '接続が登録されていません。mt_add_connection で接続を追加してください。',
}],
};
}
const list = connections.map(c => {
const isActive = c.id === activeId;
return `${isActive ? '✓ ' : ' '}[${c.id}] ${c.name}\n ${c.endpoint}`;
}).join('\n\n');
return {
content: [{
type: 'text' as const,
text: `登録済みの接続:\n\n${list}\n\n${activeId ? `現在のアクティブ接続: ${activeId}` : 'アクティブな接続はありません'}`,
}],
};
}
/**
* 接続を追加
*/
export async function handleAddConnection(args: z.infer<typeof addConnectionSchema>) {
const connection: MTConnection = {
id: args.id,
name: args.name,
endpoint: args.endpoint,
username: args.username,
password: args.password,
};
await addConnection(connection);
return {
content: [{
type: 'text' as const,
text: `接続 '${args.name}' (${args.id}) を追加しました。\nmt_use_connection でこの接続をアクティブにしてください。`,
}],
};
}
/**
* 接続を選択
*/
export async function handleUseConnection(args: z.infer<typeof useConnectionSchema>) {
const success = await setActiveConnection(args.connectionId);
if (!success) {
return {
content: [{
type: 'text' as const,
text: `接続 '${args.connectionId}' が見つかりません。mt_list_connections で接続一覧を確認してください。`,
}],
isError: true,
};
}
// 接続テスト
const client = await getMTClient(args.connectionId);
if (client) {
const result = await client.testConnection();
return {
content: [{
type: 'text' as const,
text: `接続 '${args.connectionId}' をアクティブにしました。\n${result.message}`,
}],
};
}
return {
content: [{
type: 'text' as const,
text: `接続 '${args.connectionId}' をアクティブにしました。`,
}],
};
}
/**
* 接続を削除
*/
export async function handleRemoveConnection(args: z.infer<typeof removeConnectionSchema>) {
const success = await removeConnection(args.connectionId);
if (!success) {
return {
content: [{
type: 'text' as const,
text: `接続 '${args.connectionId}' が見つかりません。`,
}],
isError: true,
};
}
return {
content: [{
type: 'text' as const,
text: `接続 '${args.connectionId}' を削除しました。`,
}],
};
}
/**
* 接続をテスト
*/
export async function handleTestConnection(args: z.infer<typeof testConnectionSchema>) {
const client = await getMTClient(args.connectionId);
if (!client) {
return {
content: [{
type: 'text' as const,
text: args.connectionId
? `接続 '${args.connectionId}' が見つかりません。`
: 'アクティブな接続がありません。mt_use_connection で接続を選択してください。',
}],
isError: true,
};
}
const result = await client.testConnection();
return {
content: [{
type: 'text' as const,
text: result.message,
}],
isError: !result.success,
};
}