Skip to main content
Glama
Adityas7netapp

Bing Search MCP Server

README.md
# Bing Search MCP Server

A Model Context Protocol (MCP) server that provides AI-grounded Bing search capabilities using Azure AI Project Client. This server enables intelligent web searches with citation tracking and URL extraction.

## Features

- **AI-Grounded Search**: Leverages Azure AI agents for intelligent search results
- **Citation Tracking**: Automatically extracts and formats citations with URLs
- **MCP Protocol**: Compatible with MCP clients for seamless integration
- **HTTP Transport**: Runs as HTTP server on port 8000 for remote access

## Prerequisites

- Python 3.8 or higher
- Azure subscription with AI Project configured
- Azure AD App Registration (for service principal authentication)
- Bing Search resource enabled in your Azure AI Project

## Installation

### Using pip

```bash
pip install -r requirements.txt
```

### Using Docker

```bash
docker build -t bing-search-mcp .
docker run --env-file .env bing-search-mcp
```

## Configuration

Create a `.env` file in the project root with the following variables:

```env
PROJECT_ENDPOINT=https://your-project.cognitiveservices.azure.com/
AGENT_ID=your-agent-id
TENANT_ID=your-azure-tenant-id
CLIENT_ID=your-azure-client-id
CLIENT_SECRET=your-azure-client-secret
```

See `.env.example` for a template.

## Usage

### Running the Server

#### HTTP Mode (default)

The server runs on `http://0.0.0.0:8000` by default:

```bash
python bing-search.py
```

The server will be accessible at:

- Local: `http://localhost:8000`
- Network: `http://<your-ip>:8000`

#### Stdio Mode

To use stdio transport, modify `bing-search.py`:

```python
# TRANSPORT = "streamable-http"
TRANSPORT = "stdio"
```

And update the run call:

```python
bing_mcp.run(transport=TRANSPORT)
```

### Available Tools

#### `bing_grounded_with_ai`

Performs an AI-grounded Bing search with citation tracking.

**Parameters:**

- `query` (str): The search query

**Returns:**

- Response text with inline citations in Markdown format
- List of extracted URLs with titles

**Example:**

```python
result_text, urls = bing_grounded_with_ai("What is the latest news about AI?")
print(result_text)  # Text with [Title](URL) citations
print(urls)         # [["Title1", "url1"], ["Title2", "url2"], ...]
```

## Architecture

The server uses:

- **FastMCP**: Simplified MCP server implementation
- **Azure AI Project Client**: Manages AI agents and threads
- **Azure Identity**: Handles service principal authentication

## Error Handling

The server includes comprehensive error handling for:

- Missing or invalid queries
- Azure credential issues
- Agent execution failures
- Thread cleanup errors

All errors are returned as `ToolError` exceptions with descriptive messages.

## Development

### Project Structure

```
bing-search/
├── bing-search.py      # Main MCP server implementation
├── requirements.txt    # Python dependencies
├── Dockerfile         # Container configuration
├── .env              # Environment variables (not in git)
├── .env.example      # Environment template
└── README.md         # This file
```

### Transport Modes

- **streamable-http**: HTTP server for remote access (default, port 8000)
- **stdio**: Communicates via standard input/output (alternative mode)

## Docker Support

The included Dockerfile creates a lightweight container optimized for production use:

- Based on Python 3.11-slim for minimal image size
- Non-root user for enhanced security
- Multi-stage build process
- Optimized layer caching

### Build and Run

```bash
# Build the image
docker build -t bing-search-mcp .

# Run with environment file
docker run -p 8000:8000 --env-file .env bing-search-mcp

# Run with individual environment variables
docker run -p 8000:8000 \
  -e PROJECT_ENDPOINT="your-endpoint" \
  -e AGENT_ID="your-agent-id" \
  -e TENANT_ID="your-tenant-id" \
  -e CLIENT_ID="your-client-id" \
  -e CLIENT_SECRET="your-client-secret" \
  bing-search-mcp

# Access the server
curl http://localhost:8000
```

## Security Considerations

- Never commit `.env` file or credentials to version control
- Use Azure Key Vault for production secrets management
- Rotate service principal credentials regularly
- Apply principle of least privilege to Azure AD app permissions

## Troubleshooting

### Common Issues

**Authentication Errors:**

- Verify all Azure credentials are correct
- Ensure service principal has appropriate permissions
- Check if credentials have expired

**Agent Not Found:**

- Confirm AGENT_ID exists in your Azure AI Project
- Verify PROJECT_ENDPOINT is correct

**Connection Issues:**

- Check network connectivity to Azure
- Verify firewall rules allow outbound HTTPS

## License

MIT

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

## Support

For issues and questions:

- Create an issue in the repository
- Check Azure AI Project documentation
- Review MCP protocol specifications