WebSharp.Mcp.Http
0.99.0-rc2
dotnet add package WebSharp.Mcp.Http --version 0.99.0-rc2
NuGet\Install-Package WebSharp.Mcp.Http -Version 0.99.0-rc2
<PackageReference Include="WebSharp.Mcp.Http" Version="0.99.0-rc2" />
<PackageVersion Include="WebSharp.Mcp.Http" Version="0.99.0-rc2" />
<PackageReference Include="WebSharp.Mcp.Http" />
paket add WebSharp.Mcp.Http --version 0.99.0-rc2
#r "nuget: WebSharp.Mcp.Http, 0.99.0-rc2"
#:package WebSharp.Mcp.Http@0.99.0-rc2
#addin nuget:?package=WebSharp.Mcp.Http&version=0.99.0-rc2&prerelease
#tool nuget:?package=WebSharp.Mcp.Http&version=0.99.0-rc2&prerelease
WebSharp MCP HTTP Server
WebSharp is a Model Context Protocol (MCP) server written in C# (.NET 9) that exposes web search and readable page extraction tools over the streamable HTTP transport. It pairs a SearXNG metasearch instance with the SmartReader content extraction library and ships with Docker assets so you can run everything locally with one command.
Highlights
- Streamable HTTP MCP endpoint served by ASP.NET Core via
ModelContextProtocol.AspNetCore
. - SearXNG-backed metasearch tool that returns both a readable summary and structured JSON metadata.
- SmartReader-powered page reader tools for single URLs or batches, ideal for grounding and fact checking workflows.
- Container-first development story with Docker Compose and an inspector-ready
.mcp.json
profile.
Available MCP tools
web_search
Parameter | Type | Default | Notes |
---|---|---|---|
query |
string | required | Free-form search string submitted to the configured search backend (defaults to SearXNG). |
limit |
integer | 10 | Maximum number of results to surface in the text summary. When set to 0 or negative, the parameter is omitted and the backend decides the result count. |
categories |
string | "general" |
Comma-separated categories forwarded to the backend (for SearXNG, examples include general,it,science ). |
language |
string | "en" |
Language tag forwarded to the backend. When using the default SearXNG instance, see its language list. |
Response
- Text summary showing the top results, related suggestions, and any unresponsive engines.
structuredContent
contains a JSON object with:query
: echo of the evaluated query string.items
: array of result objects (title
,url
,content
,engine/engines
,category
,positions
,parsed_url
).suggestions
: related queries returned by the backend (SearXNG surfaces them when available).unresponsive_engines
: list of engines that timed out or failed, with optional messages.error
: present when the search could not be completed.
web_page_read
Parameter | Type | Default | Notes |
---|---|---|---|
urls |
array<string> | required | One or more absolute HTTP/HTTPS URLs to fetch and parse. |
Response
- When a single URL is provided, returns the article title, excerpt, a preview of the readable text (~800 characters), and footer metadata (source URL, detected language).
- When multiple URLs are provided, the summary includes overall success/failure counts, per-page details (title, URL, full text, language), and error messages for any failures. Requests run concurrently and honor the MCP cancellation token.
structuredContent
is not populated; all data is returned in the text block.
Run everything with Docker Compose
- Install Docker Desktop (or another OCI-compatible runtime) and ensure it is running.
- From the repository root, start both the SearXNG dependency and the MCP server:
docker compose -f docker-compose.yaml --project-name websharp up -d
(add--build
on the first run or whenever the Dockerfile changes). - Wait until the
websharp-mcp
container reportsNow listening on: http://0.0.0.0:8080
. - The MCP server is now reachable at
http://localhost:8081
(mapped from container port 8080). SearXNG is available athttp://localhost:8080/
for inspection.
Build the Docker image manually
Run the server image build without Docker Compose from the repository root:
docker build -f .\src\WebSharp.Mcp.Http\Dockerfile -t jessegador/websharp-mcp:v0.99.0-rc2 --no-cache src
Update -t
to match the image registry and tag you plan to publish.
Connect with the MCP Inspector
- Start (or keep running) the compose stack above.
- Launch the Inspector with the included client profile:
npx -y @modelcontextprotocol/inspector --config .\.mcp.json --server websharp-mcp
- Copy the printed token into the Inspector UI by opening
http://localhost:6274/?MCP_PROXY_AUTH_TOKEN=<token>
in your browser. - In the Inspector UI, pick the
websharp-mcp
server to explore the available tools and try calls right away.
Running from source
- Install the .NET 9 SDK.
- Ensure you have access to a SearXNG endpoint. The easiest option is to keep using the Docker Compose service and export
Searxng__BaseUrl
tohttp://localhost:8080
before starting the app. - Launch the server:
dotnet run --project src/WebSharp.Mcp.Http/WebSharp.Mcp.Http.csproj --urls http://localhost:8081
- The MCP endpoint listens on
/
. InDEBUG
builds you can hit/__routes
to inspect the configured ASP.NET endpoints.
Configuration
Environment variable | Default | Description |
---|---|---|
ASPNETCORE_URLS |
http://0.0.0.0:8080 (Docker) |
Listening address(es) for the HTTP server. Override to change the exposed MCP port. |
Searxng__BaseUrl |
http://searxng:8080 |
Base URL of the SearXNG instance. Required if you are not running the bundled Docker service. Must be an absolute URI. |
Cors__AllowAnyOrigin |
true |
Permit all origins. Set to false when you want to limit callers via Cors__AllowedOrigins__0=<origin> style keys. |
Cors__AllowAnyHeader |
true |
Allow all request headers. |
Cors__AllowAnyMethod |
true |
Allow all HTTP methods. |
Cors__AllowCredentials |
false |
When true , credentials are accepted and you must explicitly enumerate origins. |
Cors__AllowedOrigins__{n} |
(empty) | Optional origin allowlist entries when AllowAnyOrigin is false . |
Cors__AllowedHeaders__{n} |
(empty) | Optional header allowlist. |
Cors__AllowedMethods__{n} |
(empty) | Optional method allowlist. |
All configuration values can also be supplied via appsettings.json
/appsettings.Development.json
. The Docker Compose definition mounts the correct defaults for local experimentation.
Using a different SearXNG instance
- Point
Searxng__BaseUrl
at your hosted SearXNG deployment (for examplehttps://searxng.example.com
). - Make sure the endpoint you target exposes the SearXNG Search API and permits the categories/languages you request.
- Consider adjusting the bundled
searxng/settings.yml
to tune activated engines, safe search, or rate limits before publishing to the MCP registry.
Security notes
- The HTTP transport does not include authentication. Run behind a reverse proxy, tunnel, or VPN when exposing beyond localhost.
- CORS defaults to permissive settings for debugging. Tighten them before deploying to shared environments.
- The server respects MCP cancellation tokens, and page fetches enforce short HTTP timeouts to avoid hanging client sessions.
Registry metadata
- Name:
websharp-mcp
- Transport:
streamable-http
- Endpoint:
/
- See
.mcp.json
for a ready-to-use inspector profile.
License
This project is available under the MIT license (see LICENSE
).
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net9.0
- Microsoft.VisualStudio.Azure.Containers.Tools.Targets (>= 1.22.1)
- ModelContextProtocol (>= 0.3.0-preview.4)
- ModelContextProtocol.AspNetCore (>= 0.3.0-preview.4)
- SmartReader (>= 0.10.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last Updated |
---|---|---|
0.99.0-rc2 | 20 | 9/22/2025 |