MCP Server
This site is also an MCP
server: point an AI agent at /mcp and it can read this documentation, look up any
setting with its real default, and have the service worker file it just wrote reviewed - without
guessing from a training snapshot.
Nothing below is a hand-maintained copy of the docs. The option and event catalogs are parsed out
of the TypeScript that compiles into the shipped bit-bswup.js / bit-bswup.sw.js
bundles, the component parameters are reflected off the shipped assembly, and a documentation page
is rendered by the very component this site serves. When the library changes, the answers change
with it.
Connect an agent
The server speaks MCP over streamable HTTP at https://bswup.bitplatform.dev/mcp. Add it to Claude Code with:
claude mcp add --transport http bit-bswup https://bswup.bitplatform.dev/mcp
Or, for any client that reads an mcp.json (VS Code, Claude Desktop, Cursor, ...):
{
"servers": {
"bit-bswup": {
"type": "http",
"url": "https://bswup.bitplatform.dev/mcp"
}
}
}
Every tool is also mounted as a plain HTTP GET under /api/mcp/<ToolName>, so you can
read any of them in a browser tab - no MCP client required. The explorer below uses the real MCP
endpoint, and shows you both.
What makes it a good citizen
Speaking MCP is the easy half; the half that decides whether an agent uses a server well is what the
server declares about itself. Everything here is verifiable from the explorer below - press
Send on tools/list and read the JSON.
- Every tool is annotated. All of them carry
readOnlyHint,idempotentHintand a closedopenWorldHint, so a client can tell that nothing here writes, deletes or reaches out to a third party - and can stop asking you to approve a documentation lookup. - Structured results, not just text. The tools that answer with data publish an
outputSchemaand returnstructuredContent, so an agent gets typed fields to reason over instead of a JSON string it has to re-parse out of prose. - Every argument documents itself. Each parameter carries its own description in the input schema, with the shape of the value it expects - which is what an agent reads before it guesses.
- The URIs complete. The server answers
completion/completefrom its own catalogs, so a client filling inbswup://docs/{slug}is offered the slugs that exist rather than left to invent one. Try the Suggest values button underresources/read. - Bounded work.
InspectBswupServiceWorker, the one tool that parses a file you submit, runs against a time budget and says so in its answer when it hits it, rather than reporting a partial scan as a finished one.
What an agent is told
Before a single tool is called, the server hands the client its identity and a block of instructions - the one part of an MCP server a person normally never sees, because it goes into the model's system prompt rather than into any answer. This is the live handshake with the server running this page:
Shaking hands with the server...
Try it live
This calls the running server from your browser and shows the exact JSON-RPC that goes over the wire.
Request
Pick a method and press Send.Response
-What the server exposes
Loading the catalog from the server...
How it is built
The whole server is one controller and a handful of catalogs in this site's host project - roughly the smallest shape an MCP server can take on top of an existing ASP.NET Core app:
Server/Controllers/McpController.cs- every tool is a controller action carrying both[HttpGet]and[McpServerTool], which is what gives each one an MCP name and a browsable URL at the same time.Server/Services/BswupScriptCatalog.cs- parses the library's TypeScript for the script attributes, theself.*settings, the mode presets, theBswupMessageconstants and the built-in asset filters.Server/Services/BswupServiceWorkerInspector.cs- reads a submittedservice-worker.jsthe way the engine does, and reports the failures that otherwise only surface on a user's machine, offline.Server/Program.cs-AddMcpServer().WithHttpTransport()plusapp.MapMcp("/mcp").
GetBswupSourceFile hands out this site's own service-worker files and host document, the
two sample projects and the library's TypeScript - the files an answer about Bswup is actually made
of. It deliberately does not hand out the rest of this site: a documentation site's pages, layouts
and stylesheets answer no question about Bswup, and every one of them listed is context an agent
pays for before it has asked anything.