语义搜索工具

Meta MCP Search是一个通过语义搜索路由到1000多个本地MCP工具的服务,支持作为MCP服务器或TypeScript模块使用。

  • by appler1009
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 appler1009/meta-mcp-search

使用说明

Meta MCP搜索

单个MCP服务器暴露 search_tool 通过语义搜索路由到1000多个本地MCP工具。

特性

  • 语义搜索:用途 gte-small 嵌入(8位量化,多线程)通过 @xenova/transformers 用于快速、准确地发现工具
  • 混合搜索:查询与工具名称+描述的余弦相似性
  • MCP协议:使用stdio传输完全实现模型上下文协议
  • 对偶的运算:可以用作MCP服务器或直接作为TypeScript模块导入

安装

npm install meta-mcp-search

用法

作为MCP服务器(stdio)-快速入门

运行MCP服务器最简单的方法是使用npx:

npx meta-mcp-search

或者,如果全局安装:

npm install -g meta-mcp-search
meta-mcp-search

服务器将:

  1. 从以下位置加载工具 config.json 或 tools-manifest.json 在当前目录中
  2. 为所有工具构建嵌入
  3. 在stdio上监听MCP请求

作为进口模块

import { MetaMcpSearch, searchToolsDirect } from 'meta-mcp-search';

// Option 1: Create instance and use directly
const metaMcp = new MetaMcpSearch({
  configPath: './tools-manifest.json'
});
await metaMcp.init();

const tools = await metaMcp.search('send a message to slack');
console.log(tools);

// Option 2: Quick search function
const tools = await searchToolsDirect('list files in google drive', {
  configPath: './config.json'
});

直接函数调用

import { 
  SearchEngine, 
  loadToolsFromConfig,
  initSearchEngine,
  searchTools 
} from 'meta-mcp-search';

// Load tools
const tools = await loadToolsFromConfig('./tools-manifest.json');

// Initialize search engine
await initSearchEngine(tools);

// Search
const results = await searchTools('create a github issue', 5);

配置

config.json格式

{
  "mcpServers": {
    "google-drive": {
      "command": "node",
      "args": ["./servers/google-drive/dist/index.js"],
      "tools": [
        {
          "name": "google_drive_list",
          "description": "List files in Google Drive",
          "inputSchema": {
            "type": "object",
            "properties": {
              "folderId": { "type": "string" }
            },
            "required": ["folderId"]
          }
        }
      ]
    }
  }
}

tools-manifest.json格式

{
  "version": "1.0.0",
  "tools": [
    {
      "name": "google_drive_list",
      "description": "List files in Google Drive",
      "inputSchema": {
        "type": "object",
        "properties": {
          "folderId": { "type": "string" }
        },
        "required": ["folderId"]
      },
      "serverKey": "google-drive"
    }
  ]
}

API 参考

MetaMcpSearch

元MCP搜索功能的主类。

const metaMcp = new MetaMcpSearch(options?: MetaMcpSearchOptions);
await metaMcp.init();
await metaMcp.search(query: string, limit?: number);
await metaMcp.start(); // Start MCP server

SearchEngine

低级搜索引擎类。

const engine = new SearchEngine();
await engine.init(tools);
const results = await engine.search(query, limit);

loadToolsFromConfig(path?: string)

从配置文件加载工具。

const tools = await loadToolsFromConfig('./config.json');

MCP工具:搜索工具

服务器公开了一个工具:

输入架构:

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Natural language query describing what you want to accomplish"
    },
    "limit": {
      "type": "number",
      "default": 8,
      "description": "Maximum number of results to return"
    }
  },
  "required": ["query"]
}

输出:

[
  {
    "name": "slack_send_message",
    "description": "Send a message to a Slack channel",
    "inputSchema": { ... },
    "serverKey": "slack",
    "score": 0.89
  }
]

发展

# Build
npm run build

# Development (watch mode)
npm run dev

# Clean build artifacts
npm run clean

# Run tests
npm test

# Run tests with coverage
npm run test:coverage

发布到npm

此包已发布到npm。要发布新版本,请执行以下操作:

# 1. Make sure you're logged in to npm
npm login

# 2. Update the version in package.json
npm version patch  # or minor, or major

# 3. Build and test
npm run build
npm test

# 4. Publish
npm publish

这 prepublishOnly 脚本将自动运行 clean 和 build 在出版之前。

需求

  • Node.js>=18.0.0
  • npm

许可证

麻省理工学院