meta-mcp-search
v1.0.0
Published
Single MCP server exposing search_tool that routes to 1000+ local MCP tools via semantic search
Maintainers
Readme
Meta MCP Search
A single MCP server exposing search_tool that routes to 1000+ local MCP tools via semantic search.
Features
- Semantic Search: Uses
all-MiniLM-L6-v2embeddings via@xenova/transformersfor fast, accurate tool discovery - Hybrid Search: Cosine similarity on query vs tool name + description
- MCP Protocol: Full implementation of Model Context Protocol with stdio transport
- Dual Usage: Can be used as an MCP server or imported directly as a TypeScript module
Installation
npm install meta-mcp-searchUsage
As MCP Server (stdio) - Quick Start
The easiest way to run the MCP server is with npx:
npx meta-mcp-searchOr if installed globally:
npm install -g meta-mcp-search
meta-mcp-searchThe server will:
- Load tools from
config.jsonortools-manifest.jsonin the current directory - Build embeddings for all tools
- Listen on stdio for MCP requests
As Imported Module
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'
});Direct Function Calls
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);Configuration
config.json Format
{
"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 Format
{
"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 Reference
MetaMcpSearch
Main class for the meta MCP search functionality.
const metaMcp = new MetaMcpSearch(options?: MetaMcpSearchOptions);
await metaMcp.init();
await metaMcp.search(query: string, limit?: number);
await metaMcp.start(); // Start MCP serverSearchEngine
Low-level search engine class.
const engine = new SearchEngine();
await engine.init(tools);
const results = await engine.search(query, limit);loadToolsFromConfig(path?: string)
Load tools from configuration file.
const tools = await loadToolsFromConfig('./config.json');MCP Tool: search_tool
The server exposes a single tool:
Input Schema:
{
"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"]
}Output:
[
{
"name": "slack_send_message",
"description": "Send a message to a Slack channel",
"inputSchema": { ... },
"serverKey": "slack",
"score": 0.89
}
]Development
# 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:coveragePublishing to npm
This package is published to npm. To publish a new version:
# 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 publishThe prepublishOnly script will automatically run clean and build before publishing.
Requirements
- Node.js >= 18.0.0
- npm
License
MIT
