document-search-tool
v1.0.0
Published
Document search tool for parsing documents and performing web searches
Maintainers
Readme
Document Search Tool
A standalone document search tool that can be used as a subprocess for document parsing and web search functionality.
Features
- parseDocumentLink: Parse documents from URLs using LlamaParse
- googleSearch: Perform web searches using Perplexity AI API
Installation
npm installBuild
npm run buildUsage
As a Subprocess
The tool can be executed as a subprocess with command line arguments:
node dist/index.js <command> <args_json>Examples
Parse a document:
node dist/index.js parseDocumentLink '{"document_link": "https://example.com/document.pdf"}'Perform a web search:
node dist/index.js googleSearch '{"query": "latest shipping regulations"}'As a Module
import { DocumentSearchSubprocess } from './dist/index.js';
const subprocess = new DocumentSearchSubprocess();
const result = await subprocess.testCommand('googleSearch', { query: 'test query' });
console.log(result);Environment Variables
Create a .env file in the root directory with the following variables:
LLAMA_PARSE_URL=https://api.llamaparse.com/parse
LLAMA_API_KEY=your_llama_api_key
VENDOR_MODEL=your_vendor_model
S3_API_TOKEN=your_s3_api_token
S3_GENERATE_HTML_URL=your_s3_generate_html_url
PERPLEXITY_API_KEY=your_perplexity_api_keyDevelopment
# Build and run in development mode
npm run dev
# Clean build artifacts
npm run cleanIntegration with Main MCP Server
To use this tool as a subprocess from the main MCP server, you can spawn it as a child process:
import { spawn } from 'child_process';
import { promisify } from 'util';
async function callDocumentSearchTool(command: string, args: any): Promise<any> {
return new Promise((resolve, reject) => {
const child = spawn('node', [
'path/to/document-search-tool/dist/index.js',
command,
JSON.stringify(args)
]);
let stdout = '';
let stderr = '';
child.stdout.on('data', (data) => {
stdout += data.toString();
});
child.stderr.on('data', (data) => {
stderr += data.toString();
});
child.on('close', (code) => {
if (code === 0) {
try {
const result = JSON.parse(stdout);
resolve(result);
} catch (error) {
reject(new Error(`Failed to parse result: ${error}`));
}
} else {
reject(new Error(`Subprocess failed with code ${code}: ${stderr}`));
}
});
child.on('error', (error) => {
reject(error);
});
});
}