Skip to main content
Glama
openai-search-mcp

openai-search-mcp

by lie5860

OpenAI Search MCP

English | ็ฎ€ไฝ“ไธญๆ–‡

๐Ÿš€ Integrate OpenAI-compatible API's powerful search capabilities into Claude via MCP protocol, break through knowledge limitations, and access real-time information

License: MIT Node.js 18+ TypeScript MCP npm version

Features โ€ข Quick Start โ€ข Usage โ€ข Troubleshooting


๐Ÿ“– Overview

OpenAI Search MCP is a high-performance Node.js/TypeScript MCP server that connects your OpenAI-compatible API to Claude, Claude Code, and other AI assistants. The backend model must provide search capability (search is always performed by your configured endpoint). Web fetching supports three engines: LLM (default, uses the same modelโ€™s browse capability), Tavily, and Firecrawlโ€”selectable via the fetch_engine parameter when you need dedicated crawl services.

โœจ Key Features

  • ๐ŸŒ Real-time Web Search - Powered by your OpenAI-compatible model (must have search)

  • ๐Ÿ” Configurable Web Fetch - Default LLM; optionally use Tavily or Firecrawl via fetch_engine for real HTTP crawl and anti-bot handling

  • ๐Ÿ“„ Structured Markdown - Full-page extraction and conversion to Markdown

Why offer multiple fetch engines? In practice, (1) LLM fetch is often slower than dedicated crawl APIs (e.g. ~14s vs ~1s for Tavily/Firecrawl). (2) LLM may use cached or inferred content and can add irrelevant text, so the result may not match the live page. When you need fast, faithful, unmodified content, use fetch_engine=tavily or fetch_engine=firecrawl.

  • ๐Ÿ”„ Auto Retry - Handles network and transient API errors

  • ๐Ÿ“ฆ Plug & Play - Single npx command, minimal config

  • โšก High Performance - Cold start < 1 s, low memory footprint

  • ๐Ÿ”’ Type Safety - Full TypeScript definitions


Related MCP server: webpulse

๐ŸŽฏ Why Choose OpenAI Search MCP?

Feature

Official WebSearch

OpenAI Search MCP

Search Quality

Generic

AI Enhanced ๐Ÿง 

Web Fetching

Basic

Deep Extraction ๐Ÿ“„

Startup Speed

Slower

< 1 second โšก

Customization

Fixed

Highly Configurable โš™๏ธ

Cost

Paid

Use Your Own API Key ๐Ÿ’ฐ


๐Ÿš€ Quick Start

Prerequisites

  • Node.js 18+ (with fetch API and ES Modules support)

  • OpenAI-compatible API - This project uses the OpenAI API format. You need:

    • An API endpoint (e.g., OpenAI-compatible service)

    • An API key for that endpoint

  • Claude Desktop (optional, for GUI integration)

No installation required, run the latest version directly:

npx openai-search-mcp

Option 2: Global Installation

npm install -g openai-search-mcp
openai-search

โš™๏ธ Configure Claude Desktop

Step 1: Get API Endpoint and Key

This project uses the OpenAI API format. You need an API endpoint that is compatible with OpenAI's API specification.

Options:

  1. OpenAI-compatible API: Use any service that provides OpenAI-compatible endpoints

  2. Other OpenAI-compatible APIs: Any service that follows the OpenAI API format

You will need:

  • OPENAI_API_URL: Your API endpoint URL (e.g., https://api.openai.com/v1)

  • OPENAI_API_KEY: Your API key for that endpoint

  • OPENAI_MODEL: The model identifier (default: gpt-4o)

Step 2: Configure Environment Variables

Edit ~/.config/claude/claude_desktop_config.json (macOS/Linux) or %APPDATA%\claude\claude_desktop_config.json (Windows). Pick one of the three scenarios below and copy the matching config.

Scenario 1: Use LLM for fetch only (default)
No Tavily/Firecrawl; web_fetch uses your OpenAI-compatible model. Only required vars.

{
  "mcpServers": {
    "openai-search": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "openai-search-mcp"],
      "env": {
        "OPENAI_API_URL": "https://api.openai.com/v1",
        "OPENAI_API_KEY": "your-api-key-here",
        "OPENAI_MODEL": "gpt-4o"
      }
    }
  }
}

Scenario 2: Use Tavily as default fetch engine
Set FETCH_ENGINE=tavily and Tavily keys so that when fetch_engine is not passed, Tavily is used.

{
  "mcpServers": {
    "openai-search": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "openai-search-mcp"],
      "env": {
        "OPENAI_API_URL": "https://api.openai.com/v1",
        "OPENAI_API_KEY": "your-api-key-here",
        "OPENAI_MODEL": "gpt-4o",
        "FETCH_ENGINE": "tavily",
        "TAVILY_API_KEY": "tvly-your-tavily-key",
        "TAVILY_API_URL": "https://api.tavily.com"
      }
    }
  }
}

Scenario 3: Use Firecrawl as default fetch engine
Set FETCH_ENGINE=firecrawl and Firecrawl keys so that when fetch_engine is not passed, Firecrawl is used.

{
  "mcpServers": {
    "openai-search": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "openai-search-mcp"],
      "env": {
        "OPENAI_API_URL": "https://api.openai.com/v1",
        "OPENAI_API_KEY": "your-api-key-here",
        "OPENAI_MODEL": "gpt-4o",
        "FETCH_ENGINE": "firecrawl",
        "FIRECRAWL_API_KEY": "your-firecrawl-api-key",
        "FIRECRAWL_API_URL": "https://api.firecrawl.dev/v2"
      }
    }
  }
}
  • Required (all scenarios): OPENAI_API_URL, OPENAI_API_KEY; OPENAI_MODEL is optional (default gpt-4o).

  • Default fetch engine: FETCH_ENGINE=llm|tavily|firecrawl; when unset, defaults to llm. You can still pass fetch_engine per call to override.

  • Scenario 2 requires TAVILY_API_KEY; Scenario 3 requires FIRECRAWL_API_KEY. The *_API_URL values usually need not be changed.

Important:

  • Replace https://your-api-endpoint.com/v1 with your actual API endpoint

  • Replace your-api-key-here with your actual API key

  • The endpoint must be OpenAI-compatible

Step 3: Restart Claude Desktop

After configuration, completely quit and restart Claude Desktop.

Step 4: Verify Installation

In Claude conversation, type:

Show openai-search config info

Or

Search for latest TypeScript 5.5 features

๐Ÿ› ๏ธ Available Tools

1๏ธโƒฃ web_search - Web Search

Execute intelligent search and return structured results.

Parameters:

  • query (required) - Search keywords

  • platform (optional) - Specify platform like "github", "stackoverflow"

  • min_results (optional) - Minimum results, default 3

  • max_results (optional) - Maximum results, default 10

Usage Examples:

Search for latest Next.js 15 updates
Search TypeScript 5.5 new features, return 5 results
Search for openai-search projects on GitHub

2๏ธโƒฃ web_fetch - Web Fetching

Extract complete content from a URL and return it as Markdown. You can choose which engine performs the fetch:

Parameters:

  • url (required) - Web page URL to fetch

  • fetch_engine (optional) - "llm" | "tavily" | "firecrawl". When omitted, the server default is used (env FETCH_ENGINE, default llm).

    • llm โ€“ Uses your OpenAI-compatible model (requires model browse capability). Often slower; may return cached or model-inferred content and sometimes adds extra text.

    • tavily โ€“ Tavily Extract API (set TAVILY_API_KEY). Typically faster and returns real page content.

    • firecrawl โ€“ Firecrawl Scrape API (set FIRECRAWL_API_KEY). Typically faster and returns real page content.

Usage Examples:

Fetch README from https://github.com/lie5860/openai-search-mcp
Fetch https://example.com using Tavily (fetch_engine=tavily)
Get full doc from https://www.typescriptlang.org/docs (default LLM)

3๏ธโƒฃ get_config_info - Configuration Diagnostics

Get current configuration and connection status.

Returns:

  • API URL, model, and connection test (response time, available models)

  • fetch_engines โ€“ default (current default fetch engine from FETCH_ENGINE), and whether Tavily/Firecrawl are configured

Usage Examples:

Show openai-search config info

4๏ธโƒฃ switch_model - Model Switching

Dynamically switch AI models.

Parameters:

  • model (required) - Model ID (e.g., "gpt-4o", "gpt-4o-mini")

Usage Examples:

Switch to gpt-4o-mini model
Switch model to gpt-4o

5๏ธโƒฃ toggle_builtin_tools - Tool Management

Disable/Enable Claude's built-in search tools.

Parameters:

  • action (optional) - "on" disable built-in tools, "off" enable built-in tools, "status" view status

Usage Examples:

Disable official WebSearch tool
View current tool status

๐Ÿ’ป Development Guide

Building from Source

# Clone repository
git clone https://github.com/lie5860/openai-search-mcp.git
cd openai-search-mcp

# Install dependencies
npm install

# Build TypeScript
npm run build

# Run development server
npm run dev

# Self-test (run after build)
npm run test-server    # Config + search + LLM fetch
npm run test-search    # Search + LLM fetch
npm run test-fetch     # All fetch engines (llm / tavily / firecrawl)

Project Structure

openai-search-mcp/
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ server.ts          # MCP server main entry
โ”‚   โ”œโ”€โ”€ config/            # Configuration management
โ”‚   โ”œโ”€โ”€ providers/         # OpenAI-compatible API provider
โ”‚   โ”œโ”€โ”€ utils/             # Utilities (fetch polyfill, retry, logger)
โ”‚   โ””โ”€โ”€ types/             # TypeScript type definitions
โ”œโ”€โ”€ bin/
โ”‚   โ””โ”€โ”€ openai-search.js   # CLI command entry
โ”œโ”€โ”€ dist/                  # Build output directory
โ”œโ”€โ”€ package.json
โ”œโ”€โ”€ tsconfig.json
โ””โ”€โ”€ README.md

Tech Stack

  • Runtime: Node.js 18+

  • Language: TypeScript 5.5+

  • MCP SDK: @modelcontextprotocol/sdk ^1.0.4

  • HTTP Client: Fetch API + Undici (auto polyfill)

  • Config Management: dotenv

  • Module System: ES Modules (ESM)


๐Ÿ”ง Environment Variables

Variable

Description

Required

Default

OPENAI_API_URL

OpenAI-compatible API endpoint (must support search)

Yes

-

OPENAI_API_KEY

API key for your endpoint

Yes

-

OPENAI_MODEL

Model identifier

No

gpt-4o

DEBUG

Debug mode

No

false

OPENAI_LOG_LEVEL

Log level

No

INFO

TAVILY_API_KEY

Tavily API key (for web_fetch with fetch_engine=tavily)

No

-

TAVILY_API_URL

Tavily API base URL

No

https://api.tavily.com

FIRECRAWL_API_KEY

Firecrawl API key (when using firecrawl as default or per call)

No

-

FIRECRAWL_API_URL

Firecrawl API base URL

No

https://api.firecrawl.dev/v2

FETCH_ENGINE

Default fetch engine when fetch_engine is not passed

No

llm


๐Ÿ”ฅ Troubleshooting

โŒ Issue 1: Connection Failed

Error: โŒ Connection failed or API error

Solutions:

  1. Check if OPENAI_API_URL is correct and points to an OpenAI-compatible endpoint

  2. Verify if OPENAI_API_KEY is valid for your API provider

  3. Confirm network connection is working

  4. Use get_config_info tool for diagnostics

โŒ Issue 2: Module Not Found

Error: Cannot find module

Solutions:

# Reinstall dependencies
npm install

# Rebuild
npm run build

โŒ Issue 3: Permission Error

Error: EACCES

Solutions:

# Linux/macOS use sudo
sudo npm install -g openai-search-mcp

# Or recommend using npx (no permissions needed)
npx openai-search-mcp

โŒ Issue 4: fetch is not defined

Error: ReferenceError: fetch is not defined

Cause: fetch API not properly initialized in Node.js environment

Solutions:

  1. Check Node.js version:

node --version  # Should be >= 18.0.0
  1. Ensure using latest version (v1.0.1+ includes fetch polyfill):

npm update openai-search-mcp
# Or use npx directly
npx openai-search-mcp
  1. If problem persists, please file an issue: https://github.com/lie5860/openai-search-mcp/issues


๐Ÿ“ Advanced Configuration

Claude Desktop Prompt Optimization

Edit ~/.claude/CLAUDE.md and add the following for better experience:

# OpenAI Search MCP Usage Guide

## Activation
- Prioritize OpenAI Search for web search needs
- Auto-activate when latest information is needed
- Use web_fetch for web content extraction

## Tool Selection Strategy
| Scenario | Recommended Tool | Parameters |
|----------|-----------------|------------|
| Quick search | web_search | min_results=3, max_results=5 |
| Deep research | web_search + web_fetch | Search first, then fetch key pages |
| Specific platform | web_search | Set platform parameter |
| Complete docs | web_fetch | Fetch URL directly |

## Output Guidelines
- **Must cite sources**: `[Title](URL)`
- **Time-sensitive info**: Note retrieval date
- **Multi-source validation**: Cross-validate important info
- **No fabrication**: Clearly state when no results found

## Error Handling
- No results โ†’ Relax query or change keywords
- Connection failed โ†’ Use get_config_info to diagnose
- Timeout โ†’ Reduce max_results or retry

๐Ÿ“Š Performance Comparison

Metric

Python Version

Node.js Version (This Project)

Cold Start

~2-3 seconds

< 1 second โšก

Memory Usage

~50MB

< 30MB ๐Ÿ’พ

Package Size

~15MB

~5MB ๐Ÿ“ฆ

Type Safety

Type hints

Full TypeScript ๐Ÿ”’

Deployment

Needs virtual env

npx one-click run ๐Ÿš€


๐Ÿค Contributing

Contributions, issues, and feature requests are welcome!

  1. Fork the repository

  2. Create your feature branch (git checkout -b feature/AmazingFeature)

  3. Commit your changes (git commit -m 'Add some AmazingFeature')

  4. Push to the branch (git push origin feature/AmazingFeature)

  5. Open a Pull Request


๐Ÿ“„ License

This project is licensed under the MIT License.


๐Ÿ™ Acknowledgments

๐ŸŒŸ Tribute to Original Project

This project is based on GuDaStudio/GrokSearch (MIT License). Big thanks to the original author for the excellent work!

Key Changes:

  • โœ… Migrated from Python to TypeScript/Node.js

  • โœ… Added Fetch Polyfill for better environment compatibility

  • โœ… Optimized project structure and modular design

  • โœ… Complete TypeScript type definitions

  • โœ… Faster startup speed and smaller package size

Important Note: This project uses the OpenAI API format and requires an OpenAI-compatible API endpoint.

The original project (Python version) is equally excellent. If you're more familiar with the Python ecosystem, we recommend using the original version:


๐Ÿ“ฎ Contact


If this project helps you, please give it a โญ๏ธ Star!

Made with โค๏ธ by lie5860

Available Tools

5 tools
get_config_infoA

Returns the current OpenAI Search MCP server configuration information and tests the connection.

This tool is useful for:

  • Verifying that environment variables are correctly configured

  • Testing API connectivity by sending a request to /models endpoint

  • Debugging configuration issues

  • Checking the current API endpoint and settings

Returns

A JSON-encoded string containing configuration details:

  • api_url: The configured OpenAI-compatible API endpoint

  • api_key: The API key (masked for security, showing only first and last 4 characters)

  • model: The currently selected model for search and fetch operations

  • debug_enabled: Whether debug mode is enabled

  • log_level: Current logging level

  • log_dir: Directory where logs are stored

  • config_status: Overall configuration status (โœ… complete or โŒ error)

  • connection_test: Result of testing API connectivity to /models endpoint

    • status: Connection status

    • message: Status message with model count

    • response_time_ms: API response time in milliseconds

    • available_models: List of available model IDs (only present on successful connection)

Notes

  • API keys are automatically masked for security

  • This tool does not require any parameters

  • Useful for troubleshooting before making actual search requests

  • Automatically tests API connectivity during execution

Inputs: no named parameters.

switch_modelA

Switches the default AI model used for search and fetch operations, and persists the setting.

This tool is useful for:

  • Changing the AI model used for web search and content fetching

  • Testing different models for performance or quality comparison

  • Persisting model preference across sessions

Parameters

model : str The model ID to switch to (e.g., "gpt-4o", "gpt-4o-mini")

Returns

A JSON-encoded string containing:

  • status: Success or error status

  • previous_model: The model that was being used before

  • current_model: The newly selected model

  • message: Status message

  • config_file: Path where the model preference is saved

Notes

  • The model setting is persisted to ~/.config/openai-search/config.json

  • This setting will be used for all future search and fetch operations

  • You can verify available models using the get_config_info tool

Inputs: model (required).

toggle_builtin_toolsA

Toggle Claude Code's built-in WebSearch and WebFetch tools on/off.

Parameters: action - "on" (block built-in), "off" (allow built-in), "status" (check) Returns: JSON with current status and deny list

Inputs: action.

web_fetchA

Fetches and extracts the complete content from a specified URL and returns it as a structured Markdown document.

The url should be a valid HTTP/HTTPS web address pointing to the target page. Ensure the URL is complete and accessible (not behind authentication or paywalls).

fetch_engine (optional): Which engine to use. When omitted, the server uses the FETCH_ENGINE env (default llm). llm = OpenAI-compatible model; tavily / firecrawl = dedicated crawl (set TAVILY_API_KEY or FIRECRAWL_API_KEY).

Returns

A Markdown-formatted string containing:

  • Metadata header (source URL, title, fetch timestamp)

  • Table of Contents (if applicable)

  • Complete page content with preserved structure

  • All text, links, images, tables, and code blocks from the original page

Notes

  • Does NOT summarize or modify content - returns complete original text

  • tavily / firecrawl perform real HTTP fetch and handle anti-bot; llm depends on the model's browse capability.

Inputs: url (required), fetch_engine.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelogโ€ฆ

    TDQS

    A4.4/5.0

    Scored across 5 tools

    Disambiguation5/5

    Each tool serves a clearly distinct purpose: searching the web, fetching page content, toggling built-in tools, retrieving configuration, and switching models. There is no functional overlap or ambiguity between them.

    Naming Consistency5/5

    All tool names follow a consistent snake_case verb_object pattern (e.g., web_search, get_config_info, switch_model). No mixed conventions or unpredictable naming styles.

    Tool Count5/5

    With 5 tools, the server is well-scoped for its purpose of providing web search/fetch plus configuration management. Each tool is necessary and earns its place without excessive redundancy.

    Completeness5/5

    The tool set covers the essential operations: searching, fetching content, inspecting configuration, switching models, and managing built-in tool integration. There are no obvious missing capabilities for this domain.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      D
      maintenance
      Enables live web retrieval through MCP, allowing Claude to fetch and extract current web information with validations, SSRF protections, and structured results for grounded responses.
      -
    • A
      license
      A
      quality
      C
      maintenance
      Enables web search, page fetching, and search statistics for Claude Code and any MCP client without requiring an API key, using automatic provider fallback and caching.
      3
      MIT