websharp について
WebSharpは、LLM向けにウェブ検索と記事抽出を提供するC#・.NET 9製のMCPサーバーです。SearXNGのメタ検索とSmartReaderを組み合わせ、単一または複数URLの読み取りに対応します。
主な機能
- 01SearXNGによるウェブ検索
- 02要約と構造化検索結果の返却
- 03単一または複数ページの本文抽出
- 04streamable HTTPによるMCP接続
- 05Docker Compose設定の提供
活用シーン
- 01調査テーマに関するウェブ情報の検索
- 02ファクトチェック用の記事本文抽出
- 03複数ページを読み込んだ内容分析
MCP 対応
streamable HTTP経由で、ウェブ検索とページ抽出を行う`web_search`および`web_page_read`ツールをMCPクライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
WebSharp MCP HTTP サーバー
WebSharp は、C#(.NET 9)で記述された Model Context Protocol(MCP)サーバーで、ストリーミング可能な HTTP トランスポートを介して、ウェブ検索と読みやすいページ抽出のツールを提供します。SearXNG メタ検索インスタンスと SmartReader コンテンツ抽出ライブラリを組み合わせており、すべてを 1 つのコマンドでローカル実行できる Docker アセットが付属しています。
主な特長
ModelContextProtocol.AspNetCoreを介して ASP.NET Core から提供される、ストリーミング可能な HTTP MCP エンドポイント。- SearXNG を利用したメタ検索ツール。読みやすい要約と構造化 JSON メタデータの両方を返します。
- SmartReader を活用したページ読み取りツール。単一 URL にも複数 URL にも対応し、情報の根拠付けやファクトチェックのワークフローに最適です。
- Docker Compose を使ったコンテナー中心の開発環境と、インスペクターですぐに利用できる
.mcp.jsonプロファイル。
利用可能な MCP ツール
web_search
| パラメーター | 型 | デフォルト | 説明 |
|---|---|---|---|
query | string | 必須 | 設定された検索バックエンド(デフォルトは SearXNG)に送信する自由形式の検索文字列。 |
limit | integer | 10 | テキスト要約に表示する結果の最大数。0 以下の場合、このパラメーターは省略され、結果数はバックエンドによって決定されます。 |
categories | string | "general" | バックエンドに渡す、カンマ区切りのカテゴリ(SearXNG の場合は general,it,science など)。 |
language | string | "en" | バックエンドに渡す言語タグ。デフォルトの SearXNG インスタンスを使用する場合は、言語一覧を参照してください。 |
レスポンス
- 上位の結果、関連する候補、応答しなかったエンジンを示すテキスト要約。
structuredContentには、次の内容を含む JSON オブジェクトが格納されます。query:評価された検索文字列のエコー。items:結果オブジェクト(title、url、content、engine/engines、category、positions、parsed_url)の配列。suggestions:バックエンドが返す関連クエリ(SearXNG では利用可能な場合に表示されます)。unresponsive_engines:タイムアウトまたは失敗したエンジンの一覧。任意のメッセージが含まれる場合があります。error:検索を完了できなかった場合に含まれます。
web_page_read
| パラメーター | 型 | デフォルト | 説明 |
|---|---|---|---|
urls | array | 必須 | 取得して解析する 1 つ以上の絶対 HTTP/HTTPS URL。 |
レスポンス
- URL が 1 つの場合、記事タイトル、抜粋、読みやすいテキストのプレビュー(約 800 文字)、およびフッターのメタデータ(ソース URL、検出された言語)を返します。
- 複数の URL の場合、要約には全体の成功数/失敗数、ページごとの詳細(タイトル、URL、全文、言語)、失敗時のエラーメッセージが含まれます。リクエストは並行して実行され、MCP キャンセルトークンに従います。
structuredContentは設定されません。すべてのデータはテキストブロックで返されます。
Docker Compose ですべてを実行する
- Docker Desktop(または OCI 互換の別のランタイム)をインストールし、起動していることを確認します。
- リポジトリのルートから、SearXNG の依存関係と MCP サーバーの両方を起動します。
docker compose -f docker-compose.yaml --project-name websharp up -d(初回、または Dockerfile の変更後は--buildを追加します)。 websharp-mcpコンテナーにNow listening on: http://0.0.0.0:8080と表示されるまで待ちます。- MCP サーバーは
http://localhost:8081(コンテナーのポート 8080 からマッピング)で利用できるようになります。SearXNG は確認用にhttp://localhost:8080/で利用できます。
Docker イメージを手動でビルドする
リポジトリのルートから Docker Compose を使わずにサーバーイメージをビルドします。
docker build -f .\src\WebSharp.Mcp.Http\Dockerfile -t jessegador/websharp-mcp:v0.99.0-rc2 --no-cache src
公開予定のイメージレジストリとタグに合わせて -t を変更します。
MCP Inspector に接続する
- 上記の Compose スタックを起動します(または起動したままにします)。
- 同梱のクライアントプロファイルを使って Inspector を起動します。
npx -y @modelcontextprotocol/inspector --config .\.mcp.json --server websharp-mcp - ブラウザーで
http://localhost:6274/?MCP_PROXY_AUTH_TOKEN=<token>を開き、表示されたトークンを Inspector の UI にコピーします。 - Inspector の UI で
websharp-mcpサーバーを選択すると、利用可能なツールを確認し、すぐに呼び出しを試せます。
ソースから実行する
- .NET 9 SDK をインストールします。
- SearXNG エンドポイントにアクセスできることを確認します。最も簡単な方法は、Docker Compose サービスを引き続き使用し、アプリの起動前に
Searxng__BaseUrlをhttp://localhost:8080に設定することです。 - サーバーを起動します。
dotnet run --project src/WebSharp.Mcp.Http/WebSharp.Mcp.Http.csproj --urls http://localhost:8081 - MCP エンドポイントは
/で待ち受けます。DEBUGビルドでは、/__routesにアクセスして、設定されている ASP.NET エンドポイントを確認できます。
設定
| 環境変数 | デフォルト | 説明 |
|---|---|---|
ASPNETCORE_URLS | http://0.0.0.0:8080(Docker) | HTTP サーバーの待ち受けアドレス。公開する MCP ポートを変更するには上書きします。 |
Searxng__BaseUrl | http://searxng:8080 | SearXNG インスタンスのベース URL。同梱の Docker サービスを実行しない場合は必須です。絶対 URI を指定してください。 |
Cors__AllowAnyOrigin | true | すべてのオリジンを許可します。Cors__AllowedOrigins__0=<origin> 形式のキーを使用して呼び出し元を制限する場合は、false に設定します。 |
Cors__AllowAnyHeader | true | すべてのリクエストヘッダーを許可します。 |
Cors__AllowAnyMethod | true | すべての HTTP メソッドを許可します。 |
Cors__AllowCredentials | false | true の場合、認証情報が受け入れられます。オリジンを明示的に列挙する必要があります。 |
Cors__AllowedOrigins__{n} | (空) | AllowAnyOrigin が false の場合に指定する、任意のオリジン許可リスト項目です。 |
Cors__AllowedHeaders__{n} | (空) | 任意のヘッダー許可リストです。 |
Cors__AllowedMethods__{n} | (空) | 任意のメソッド許可リストです。 |
すべての設定値は appsettings.json/appsettings.Development.json からも指定できます。Docker Compose の定義では、ローカルで試すための適切なデフォルト値がマウントされます。
別の SearXNG インスタンスを使用する
Searxng__BaseUrlにホストされている SearXNG デプロイの URL(例:https://searxng.example.com)を指定します。- 接続先のエンドポイントで SearXNG Search API が公開され、リクエストするカテゴリと言語が許可されていることを確認します。
- MCP レジストリに公開する前に、同梱の
searxng/settings.ymlを調整して、有効化するエンジン、セーフサーチ、レート制限を設定することを検討してください。
セキュリティに関する注意
- HTTP トランスポートには認証が含まれていません。localhost の外部に公開する場合は、リバースプロキシ、トンネル、または VPN の背後で実行してください。
- CORS はデバッグ用に制限の緩い設定がデフォルトになっています。共有環境にデプロイする前に、制限を強化してください。
- サーバーは MCP のキャンセルトークンを尊重し、ページの取得には短い HTTP タイムアウトを設定して、クライアントセッションがハングしないようにします。
レジストリのメタデータ
- 名前:
websharp-mcp - トランスポート:
streamable-http - エンドポイント:
/ - すぐに使える Inspector プロファイルについては
.mcp.jsonを参照してください。
ライセンス
このプロジェクトは MIT ライセンスで公開されています(LICENSE を参照してください)。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。