A zero-data-retention web search MCP server powered by Synthetic.new for Claude Code, OpenCode, and other MCP-compatible clients.
- Zero data retention - searches aren't stored or logged
- Fast, reliable web search for AI coding agents
- Multiple deployment options -
dotnet run, Docker, or .NET global tool - Built with .NET 10 for performance and modern C# patterns
- Fully open source (MIT License)
- .NET 10.0 SDK
- API key from synthetic.new
git clone https://github.com/your-username/synthetic-search-mcp.git
cd synthetic-search-mcp
dotnet buildAdd to your Claude Desktop configuration:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%/Claude/claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"synthetic-search": {
"command": "dotnet",
"args": ["run", "--project", "/path/to/synthetic-search-mcp"],
"env": {
"SYNTHETIC_API_KEY": "your-api-key-here"
}
}
}
}The synthetic_search tool will now be available in Claude Code.
{
"mcpServers": {
"synthetic-search": {
"command": "dotnet",
"args": ["run", "--project", "/path/to/synthetic-search-mcp"],
"env": {
"SYNTHETIC_API_KEY": "your-api-key-here"
}
}
}
}dotnet publish -c Release -o /path/to/publish{
"mcpServers": {
"synthetic-search": {
"command": "/path/to/publish/synthetic-search-mcp",
"env": {
"SYNTHETIC_API_KEY": "your-api-key-here"
}
}
}
}docker build -t synthetic-search-mcp .{
"mcpServers": {
"synthetic-search": {
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "SYNTHETIC_API_KEY", "synthetic-search-mcp"],
"env": {
"SYNTHETIC_API_KEY": "your-api-key-here"
}
}
}
}dotnet tool install -g SyntheticSearch.McpServer{
"mcpServers": {
"synthetic-search": {
"command": "synthetic-search-mcp",
"env": {
"SYNTHETIC_API_KEY": "your-api-key-here"
}
}
}
}Search the web using Synthetic.new API.
Input:
{
"query": "string (required) - The search query to execute"
}Output:
{
"query": "the original query",
"results": [
{
"title": "Result title",
"url": "https://example.com",
"snippet": "Search result snippet..."
}
],
"resultCount": 10
}Example Usage in Claude:
Search for the latest .NET 10 features using synthetic_search.
dotnet builddotnet test tests/SyntheticSearchMcp.Tests/SyntheticSearchMcp.Tests.csprojThis repository includes GitHub Actions workflows for production delivery:
-
CI (
.github/workflows/ci.yml)- Runs on pull requests and pushes to
main - Restores dependencies
- Builds the project in
Release - Runs unit tests
- Builds Docker image and runs MCP handshake smoke tests
- Runs on pull requests and pushes to
-
CD (
.github/workflows/cd-images.yml)- Runs on stable semver tag pushes (
vX.Y.Z) or manual workflow dispatch - Publishes multi-arch Docker images (
linux/amd64,linux/arm64) to:ghcr.io/rudironsoni/synthetic-search-mcpdocker.io/ronsonirudi/synthetic-search-mcp
- Publishes exactly two tags per release:
latestvX.Y.Z(the git tag)
- Runs on stable semver tag pushes (
- Merge changes into
main - Create and push a version tag:
git tag v1.0.0
git push origin v1.0.0- GitHub Actions builds and publishes images automatically
If needed, you can trigger CD - Publish Images manually from the GitHub Actions UI:
version_tag: required semver value, e.g.v1.0.0source_ref: optional git ref to build from (default:main)
Configure this repository secret before using the CD workflow:
DOCKERHUB_TOKEN
# Start the server
SYNTHETIC_API_KEY=your-key dotnet run
# In another terminal, send a JSON-RPC request
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | dotnet run --project /path/to/synthetic-search-mcp| Variable | Required | Description |
|---|---|---|
SYNTHETIC_API_KEY |
Yes | Your API key from synthetic.new |
DOTNET_ENVIRONMENT |
No | Set to Development for verbose logging |
- API keys are read from environment variables only
- No data persistence - searches are not stored
- Logging goes to stderr to avoid interfering with JSON-RPC over stdout
MIT License - see LICENSE file for details.
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Synthetic.new for the zero-data-retention search API
- Model Context Protocol for the MCP specification