import { CONFIG } from "./config.js";
import { Logger } from "./logger.js";
/**
* MCP ツール定義を取得
* @returns {Array} ツール定義の配列
* @description
* - add_item_text: テキストから埋め込みを自動生成して保存
* - add_item: テキストと埋め込みベクトルを直接保存
* - search_text: テキストから埋め込みを自動生成して検索
* - search_vector: ベクトルで直接検索
* - llm_generate: llama.cpp でテキスト生成を実行
*/
export function getToolDefinitions() {
const embeddingDim = CONFIG.database.embeddingDim;
return [
{
name: "add_item_text",
description: "テキストから埋め込みを生成して保存します",
inputSchema: {
type: "object",
properties: {
content: {
type: "string",
description: "保存するテキスト内容",
},
path: {
type: "string",
description: "アイテムのメタデータパス(オプション)",
},
},
required: ["content"],
},
},
{
name: "add_item",
description: "テキストと埋め込みベクトルを直接保存します",
inputSchema: {
type: "object",
properties: {
content: {
type: "string",
description: "保存するテキスト内容",
},
path: {
type: "string",
description: "アイテムのメタデータパス(オプション)",
},
vector: {
type: "array",
items: { type: "number" },
minItems: embeddingDim,
maxItems: embeddingDim,
description: `埋め込みベクトル (${embeddingDim}次元)`,
},
},
required: ["content", "vector"],
},
},
{
name: "search_text",
description: "テキストから埋め込みを生成して類似アイテムを検索します",
inputSchema: {
type: "object",
properties: {
content: {
type: "string",
description: "検索キーワード",
},
limit: {
type: "number",
description: "返す結果の最大数(デフォルト: 10)",
minimum: 1,
maximum: 100,
},
},
required: ["content"],
},
},
{
name: "search_vector",
description: "ベクトルで類似度検索を実行します",
inputSchema: {
type: "object",
properties: {
vector: {
type: "array",
items: { type: "number" },
minItems: embeddingDim,
maxItems: embeddingDim,
description: `検索するベクトル (${embeddingDim}次元)`,
},
limit: {
type: "number",
description: "返す結果の最大数(デフォルト: 10)",
minimum: 1,
maximum: 100,
},
},
required: ["vector"],
},
},
{
name: "llm_generate",
description: "llama.cpp でテキスト生成を実行します",
inputSchema: {
type: "object",
properties: {
prompt: {
type: "string",
description: "生成するテキストのプロンプト",
},
n_predict: {
type: "number",
description: "生成するトークン数(デフォルト: 128)",
minimum: 1,
maximum: 2048,
},
temperature: {
type: "number",
description: "温度パラメータ(0.0-2.0、デフォルト: 0.7)",
minimum: 0,
maximum: 2,
},
},
required: ["prompt"],
},
},
];
}
/**
* ツール名の定数
*/
export const TOOL_NAMES = {
ADD_ITEM_TEXT: "add_item_text",
ADD_ITEM: "add_item",
SEARCH_TEXT: "search_text",
SEARCH_VECTOR: "search_vector",
LLM_GENERATE: "llm_generate",
};
Logger.debug("MCP tools module loaded");