BunkerWeb MCP
OfficialYou can manage and inspect a BunkerWeb deployment through MCP tools and resources, covering API auth/probes, services, instances, bans, configuration, plugins, scheduler jobs, cache files, and optional docs/log/skills access.
Authenticate to the BunkerWeb API and run ping, health, and diagnostic checks.
Manage services and drafts: list, read, create, update, delete, and convert between online/draft states.
Read and update global configuration and manage custom config snippets, including uploads and bulk deletion.
Manage instances: list, get, create, update, delete, ping, stop, and reload, including bulk actions.
Manage IP bans: list active bans, ban IPs, and unban IPs globally or per service.
Install/list/uninstall plugins and work with scheduler jobs and job cache files.
Search BunkerWeb documentation semantically when remote search is configured.
Access read-only MCP resources for global config, job history, active bans, instance status, and bundled Agent Skills.
Use optional runtime log tools when a log path is configured, and enable read-only mode or secret redaction for safer operation.
Manage services, instances, bans, configuration snippets, plugins, and scheduler jobs. Connect through streamable HTTP or a local stdio subprocess. Legacy JSON-RPC HTTP and WebSocket endpoints remain available for existing integrations.
You need a reachable BunkerWeb API and its credentials when authentication is enabled. See theBunkerWeb documentation for API setup.
How it fits together
The server holds no BunkerWeb state. It turns each tool call into a request to the BunkerWeb API.
Related MCP server: Developer Toolbox MCP
Quick start
Connect to an existing BunkerWeb API
Clone this repository and open its directory.
Copy .env.example to
.env. SetBUNKERWEB_BASE_URLto an API address reachable from the container, and supply its bearer token or Basic credentials. A container'slocalhostrefers to itself.Set
MCP_ALLOWED_HOSTS=localhost,localhost:8080,127.0.0.1,127.0.0.1:8080for local HTTP clients. KeepSEARCH_MODE=disabledunless you have a search service.Run
docker compose -f docker-compose-mcp-only.yml up --build -d.Check liveness with
curl http://127.0.0.1:8080/health; expect"status":"healthy".Connect your client to
http://127.0.0.1:8080/mcp/.
The MCP-only Compose file loads .env, builds the
server, and publishes port 8080. For the published image instead, run
docker run --rm -p 127.0.0.1:8080:8080 --env-file .env bunkerity/bunkerweb-mcp:latest.
Use a release tag for a fixed version; the release workflow
builds images for AMD64 and ARM64.
Try the bundled demo stack
Run docker compose up --build -d from the repository directory. The default
docker-compose.yml starts BunkerWeb 1.6.13, its scheduler and
API, MariaDB, Redis, and this server. It publishes BunkerWeb on ports 80/443 and
MCP on 8080. The included .mcp.json points Claude Code at this server.
The demo publishes/mcp/ on port 8080 on all interfaces without a client token check.
This file sets the API URL and demo credentials in its service definitions;
editing .env does not replace those values. It also disables search and MCP DNS
rebinding protection. Use it on a trusted development machine; review credentials,
port exposure, and host validation before exposing it to a network.
Connect an MCP client
Streamable HTTP
Use /mcp/, including the trailing slash. The repository's Claude Code config uses:
{
"mcpServers": {
"bunkerweb": {
"type": "http",
"url": "http://127.0.0.1:8080/mcp/"
}
}
}For a remote server, change the URL to your HTTPS endpoint. When runtime log
access is enabled, add "headers": {"x-mcp-token": "<shared-secret>"} inside the
server entry. Read the authentication limits in Security before exposing HTTP.
Stdio: Claude Code or Claude Desktop
From the repository directory, install with Python 3.11 or newer using the hash-pinned build and runtime dependencies:
python3 -m venv .venv
.venv/bin/pip install --require-hashes --no-deps -r requirements-build.txt -r requirements.txt
.venv/bin/pip install --no-deps --no-build-isolation .This creates .venv/bin/bunkerweb-mcp in your checkout. Use its absolute path in
the client JSON below, replacing /absolute/path/to with your repository directory.
It runs a stdio subprocess without an HTTP listener.
For Claude Code, replace the HTTP entry in .mcp.json with this configuration.
For Claude Desktop, put it in claude_desktop_config.json:
{
"mcpServers": {
"bunkerweb": {
"command": "/absolute/path/to/.venv/bin/bunkerweb-mcp",
"env": {
"BUNKERWEB_BASE_URL": "http://api.example.com:8888",
"BUNKERWEB_API_TOKEN": "<api-token>",
"SEARCH_MODE": "disabled"
}
}
}
}Replace the executable path and API address with your own. Keep real credentials out of version control. Stdio uses your local process permissions and API credentials.
Tools and resources
Read GET /tools for the running server's tool names, descriptions, and input
schemas. The registry defines 36 API tools, all named verb_noun (ADR 0007):
Group | Tools |
Authentication and probes |
|
Instances |
|
Bans |
|
Services |
|
Global configuration |
|
Custom configuration |
|
Plugins |
|
Job cache files |
|
Scheduler jobs |
|
Optional tools:
list_logs,read_log: register whenBUNKERWEB_LOGS_PATHpoints to a runtime log directory. Mount it read-only; HTTP mode also requires the shared secret. Reads scan up to 1 MiB and return at most 500 lines or 64 KiB of content, with cursors for older history. Compressed.gzrotations are excluded. Treat log content as untrusted data.search_bunkerweb_docs: registers in remote search mode.
Tool behavior
Use diagnose_bunkerweb to check the connected API's host, reachability, authentication, version,
MULTISITE, and instance counts. Pass service to inspect its existence, draft state,
and setting-owner counts. An unknown version appears as
unknown (strictest rules applied).
update_service validates, writes, then reads back:
It checks setting names and ownership before sending changes. It refuses the request if validation reads fail or
MULTISITEis notyes. It skips invalid or externally owned keys and unsupported renames; if nothing remains, it sends no write.After an accepted write, it reads the service back without the result cache. The result adds
summaryas its first field and areceiptwithdb(verified,partial, orunverified), plusissuesandhintswhen needed. These report names and reasons, without setting values.A complete match reads
DB VERIFIED (2/2 MATCH). LIVE UNVERIFIED.A failed read-back readsWRITE ACCEPTED. DB UNVERIFIED. LIVE UNVERIFIED.Only a read-back that confirms a draft addsDRAFT: NOT PUBLISHED.A failed read-back omits the draft marker.The summary always ends
LIVE UNVERIFIED.BunkerWeb 1.6 offers no live-state signal; the receipt does not prove that instances use the saved configuration.
stop_instances and reload_instances need exactly one of hostname or all=true; any other
combination fails validation and sends nothing to BunkerWeb. delete_instances,
delete_configs and delete_cache_files take a list and always call the bulk endpoint.
update_service with is_draft toggles a service between draft and online.
Tool metadata identifies reads and destructive writes. MCP_READ_ONLY=true removes
write tools and their prompts on every transport, including create_api_token, which
returns a credential. See ADR 0006
for the version rules and enforcement boundary.
Resources
The MCP adapter also exposes read-only resources:
URI | Contents |
| Global configuration; an empty upstream result includes guidance to use |
| Scheduler jobs and execution history, separate from runtime log files. |
| Active IP bans. |
| Registered instances and their status. |
| Bundled Agent Skills and reference files as text; see Agent Skills. |
The first four resources return JSON. Skill resources register when MCP_ENABLE_SKILLS=true.
Prompts
Tool guidance comes from the bundled prompt catalog.
The server exposes matching MCP prompts when catalog text exists. Override the
catalog with BUNKERWEB_PROMPT_CATALOG.
Examples and legacy workflow integrations live in n8n-workflows.
Agent Skills
The server bundles 13 BunkerWeb Agent Skills (59 files), available through MCP
resources/list and resources/read. Start with skill://bunkerweb/bunkerweb/SKILL.md;
the server's initialization instructions point there too. This entrypoint links
to the other 12 skills on GitHub and to its bundled references/ files.
Read bundled files at skill://bunkerweb/<skill>/<path>, for example
skill://bunkerweb/bunkerweb/references/docker.md. Files are served verbatim,
with text/markdown for .md files. Set MCP_ENABLE_SKILLS=false to omit skill
resources and the skills sentence from the server instructions.
Skills come from bunkerity/bunkerweb-skills, pinned by SKILLS_REF.
Refresh with scripts/sync_skills.py --ref <sha>; CI runs the script with --check to detect drift.
Configuration
config.py reads environment variables and .env.
Defaults below come from that settings model; Compose service values and container
environment variables can override them. unset denotes an absent value or an empty string.
Environment variable | Default | Meaning |
|
| Base URL for the BunkerWeb control-plane API. |
|
| Static API token used for Authorization bearer header (masked in logs). |
|
| Username for HTTP Basic authentication. |
|
| Password for HTTP Basic authentication (masked in logs). |
|
| HTTP request timeout in seconds. |
|
| Maximum number of retries for transient HTTP errors. |
|
| Initial backoff delay in seconds. |
|
| Maximum backoff delay in seconds. |
|
| Shared secret for legacy RPC/WebSocket access; also required on MCP HTTP when runtime logs are enabled. See Security. |
|
| Application log level. |
|
| Runtime log directory; unset disables log tools. Mount read-only. |
|
| Custom tool-prompt JSON path; unset uses the bundled catalog. |
|
| Mask the values of settings whose names match a sensitive pattern in tool and resource outputs, withhold upstream error details and refuse writes to sensitive settings. See Security. |
|
| Regular expression that replaces the built-in sensitive setting name pattern; unset keeps the built-in one. Avoid nested quantifiers such as |
|
|
|
|
| URL of the remote search service API. |
|
| Search API request timeout in seconds. |
|
| Enable DNS rebinding protection for MCP endpoints (recommended for production). |
|
| Comma-separated MCP Host allowlist. Include the port variants clients send. |
|
| Comma-separated MCP Origin allowlist for browser clients. |
|
| Serve bundled Agent Skills as |
|
| Register only read-only tools; write tools are not available on any transport. |
|
| Enable rate limiting on endpoints. |
|
| Requests to |
|
| Requests to |
|
| Messages per WebSocket connection, when rate limiting is enabled. |
|
| Cache selected read operations in process memory. |
WORKERS is a Docker entrypoint setting, default 1, rather than a Pydantic
setting. Caches and rate-limit state live in each worker process.
Documentation search
Search needs a separate service: set SEARCH_MODE=remote and SEARCH_API_URL
to its URL. This repository does not bundle that service. Without it, disable search;
otherwise the server registers search_bunkerweb_docs and readiness checks the service.
Security
Tools can change configuration, stop instances, delete services, and install plugins.
Grant access only to clients you trust with the configured BunkerWeb API credentials.
SetMCP_READ_ONLY=true to serve only read tools on every transport. The server has no
per-client roles.
The HTTP application implements these shared-secret checks:
Endpoint | Authentication |
| Requires |
| Requires |
| Requires the |
| No application token check. |
HTTP startup fails if you configure runtime logs without a non-empty shared secret.
BUNKERWEB_API_TOKEN and Basic credentials authenticate the server to BunkerWeb;
they do not authenticate MCP clients. The API client prefers a bearer token over Basic auth.
Keep HTTP on a trusted network or behind an authenticated reverse proxy. Use TLS
for remote connections, restrict the exposed endpoints, and configure
MCP_ALLOWED_HOSTS and MCP_ALLOWED_ORIGINS for your clients. DNS rebinding
protection does not replace authentication. See docs/security.md.
Secret redaction
Set BUNKERWEB_REDACT_SECRETS=true to mask the values of sensitive settings (matched by
name) in tool and resource outputs before they reach the client. Upstream API error
details are withheld and only the HTTP status is returned. It is not a content scanner:
custom config snippets, log lines, documentation search results, cache files outside the
denylist and secrets embedded in other values are not masked. See
docs/security.md.
Observability
The HTTP server exposes Prometheus metrics at /metrics, liveness at /health,
and dependency readiness at /ready. Readiness probes BunkerWeb's /ping without
API credentials and, in remote search mode, the search service's /health; a
protected API can therefore fail readiness even when authenticated tools work.
See docs/OBSERVABILITY.md for metrics, tracing, and dashboard reference. Grafana dashboards: BunkerWeb MCP and MCP BunkerWeb. Tracing is opt-in; this repository does not include a monitoring Compose stack.
Development
Use the hash-pinned build and development dependencies before installing this package from source. AGENTS.md contains installation, lint, formatting, strict type-checking, and test commands. Tests mock upstream HTTP calls and enforce an 80% coverage floor.
.pre-commit-config.yaml checks YAML/TOML, file hygiene,
and Python lint/formatting. Run pre-commit install to install the local hooks.
The architecture decisions record design context.
docs/tdqs.md explains the Glama quality score and how to run the same
scorer locally with scripts/tdqs.py before changing tool descriptions.
Supply chain
Build, runtime, and development dependencies use hash-pinned
requirements-build.txt,requirements.txt, andrequirements-dev.txtlocks. Edit their.insources and regenerate with the uv commands in AGENTS.md; do not hand-edit generated locks.CI runs quality checks, tests on Python 3.11–3.14, CodeQL, and container checks. Plumber checks CI/CD security; OpenSSF Scorecard analyzes repository security practices. Badges link to published results.
The release workflow requests build provenance and an SBOM for Docker images.
Follow .github/SECURITY.md to report vulnerabilities.
License
MIT. See LICENSE.
Available Tools
37 toolsban_ipsA
Ban IPs on every instance: bans is a list of {ip, exp, reason, service}, exp in seconds (0 = permanent), service omitted for global. All IPs are validated before any is banned. Use unban_ips to lift a ban. Acts on the instances immediately.
Inputs: bans (required).
create_api_tokenA
Create a BunkerWeb API token (Biscuit) for use outside this server; returns only the token, a live credential to keep secret. Give username and password, or omit both to use the server's credentials. Needs an API user; lifetime is BunkerWeb's API_BISCUIT_TTL_SECONDS. Redaction may mask it.
Inputs: payload, password, username.
create_configADestructive
Create one custom config snippet from text (method api); fails if the name exists or the service is unknown. Use create_configs_from_files to upload files. Saved to the database; the scheduler applies it later; this tool cannot confirm it is live.
Inputs: data (required), name (required), type (required), service, +1 more.
create_configs_from_filesADestructive
Create snippets from base64 files ({filename, content_base64}) sharing one type and service; each is named after its sanitized file stem and bad files are reported, not fatal. Use create_config for text. Saved to the database; the scheduler applies it later; this tool cannot confirm it is live.
Inputs: files (required), config_type (required), service, is_draft.
create_instanceA
Register an instance (hostname may carry a scheme and port, https://host:5443). Name defaults to 'manual instance', method to api; fails if it exists. Use update_instance to change one. Saved to the database; the scheduler applies it later; this tool cannot confirm it is live.
Inputs: hostname (required), name, port, method, +3 more.
create_serviceA
Create a service named by SERVER_NAME (first word becomes its ID) with optional unprefixed settings and a draft flag. Fails if the name or a server name is taken. Use update_service to change one. Saved to the database; the scheduler applies it later; this tool cannot confirm it is live.
Inputs: server_name (required), is_draft, variables.
delete_cache_filesADestructive
Delete job cache files: files is a list of {service, plugin, job_name, file_name} service omitted for global. Use list_cache_files to find the keys. Missing files are reported per file; run_jobs regenerates them. Queued for the scheduler; this tool cannot confirm it ran.
Inputs: files (required).
delete_configsADestructive
Delete config snippets: configs is a list of {service, type, name}, service 'global' for global ones. Only UI/API-managed ones go; others come back as skipped, 404 if none. Use list_configs to find them. Saved to the database; the scheduler applies it later; this tool cannot confirm it is live.
Inputs: configs (required).
delete_instancesADestructive
Unregister instances by hostname; use list_instances to find them. Hosts keep running (stop_instances halts them). Only UI/API-registered ones go; others come back as skipped, 404 if none can. Saved to the database; the scheduler applies it later; this tool cannot confirm it is live.
Inputs: instances (required).
delete_serviceADestructive
Delete a service and all its settings, not reversible; wizard-managed services are refused. Use update_service with is_draft=true to take one offline instead. Saved to the database; the scheduler applies it later; this tool cannot confirm it is live.
Inputs: service (required).
diagnose_bunkerwebARead-only
Read-only report on the connected BunkerWeb: API reachability, authentication, version, MULTISITE and instance counts; service (a service ID) adds its existence, draft state and setting owners. A failed check shows as FAIL or null, not an error. Use ping_api for a bare probe.
Inputs: service.
get_cache_fileARead-only
Read one job cache file by service, plugin, job_name and file_name as list_cache_files shows. Returns printable text; download=true returns base64 bytes instead. 404 if missing; sensitive files are refused when secret redaction is on. Use list_cache_files to find files.
Inputs: plugin (required), job_name (required), file_name (required), service, +1 more.
get_configARead-only
Read one custom config snippet with its content, by service, type and name; 404 if unknown. Use list_configs to find snippets.
Inputs: name (required), type (required), service.
get_global_configARead-only
Read global settings; full=true adds defaults, methods=true adds the method that set each. Cached up to 10 min. Use get_service for one service's settings.
Inputs: full, methods.
get_instanceARead-only
Fetch one registered instance by hostname (name, ports, server_name, method, status, last_seen); 404 if unknown. Cached up to 60 s. Use list_instances to find hostnames, ping_instances to test reachability.
Inputs: hostname (required).
get_serviceARead-only
Read one service's settings by ID (its first SERVER_NAME), with the method that set each; full=true adds defaults, with_drafts=false hides drafts. 404 if unknown. Cached up to 5 min. Use list_services to find IDs, get_global_config for global ones.
Inputs: service (required), full, methods, with_drafts.
install_pluginsADestructive
Install UI plugins from base64 archives ({filename, content_base64}; .zip, .tar.gz, .tar.xz with plugin.json). An existing plugin ID is refused; bad archives are reported. Uninstall first to replace. Saved to the database; the scheduler applies it later; this tool cannot confirm it is live.
Inputs: files (required), method.
list_bansARead-only
List active bans as each instance reports them (ip, scope, service, kind, incl. CrowdSec entries), grouped per instance. Cached up to 30 s. Use it to check whether an IP is banned, or for the exact ip and service that unban_ips when writes are enabled needs.
Inputs: no named parameters.
list_cache_filesARead-only
List files that scheduler jobs cached (service, plugin, job, file name, checksum, last_update). with_data inlines text only; binary files show a placeholder, so read them with get_cache_file download=true. Use get_cache_file to read one.
Inputs: plugin, service, job_name, with_data.
list_configsARead-only
List custom config snippets (service, type, name, draft flag), optionally with content, across every scope unless filtered. Use get_config to read one snippet in full.
Inputs: type, service, with_data, with_drafts.
list_instancesARead-only
List every registered BunkerWeb instance (hostname, name, port, method, status, last_seen). Cached up to 60 s. This is registration data, not a live check: use ping_instances for reachability, get_instance for one host.
Inputs: no named parameters.
list_jobsARead-only
List scheduler jobs with their run history and cache metadata. Use list_cache_files for the files they wrote, and run_jobs when writes are enabled to trigger them.
Inputs: no named parameters.
list_pluginsARead-only
List installed plugins, filtered by type (all, external, ui, pro). type=ui lists the IDs accepted by uninstall_plugin when writes are enabled. Use list_jobs for jobs.
Inputs: type, with_data.
list_servicesARead-only
List services (id, method, is_draft, template, security mode, dates); with_drafts=false hides drafts. Cached up to 5 min. Use get_service for one service's settings, get_global_config for global ones.
Inputs: with_drafts.
ping_apiARead-only
Check that the BunkerWeb API answers (GET /ping, returns pong); needs no credentials. The fastest liveness probe. Use diagnose_bunkerweb to also check authentication, version and instances, ping_instances to reach the instances themselves.
Inputs: no named parameters.
ping_instancesARead-only
Ping one instance (hostname) or every registered instance (hostname omitted) and return each answer; BunkerWeb replies 502 if any ping fails. Read-only. Use list_instances for registration data without pinging.
Inputs: hostname.
reload_instancesADestructive
Reload configuration on one instance (hostname) or every registered instance (all=true), never both. test=true (default) checks the config first, then reloads; test=false reloads without the check. Returns only success or a 502 error. Use stop_instances to halt. Acts on the instances immediately.
Inputs: all, test, hostname.
run_jobsA
Trigger every job of the listed plugins (jobs: {plugin, name}; name is informational, all of a plugin's jobs run), e.g. after delete_cache_files. Returns only 'Jobs scheduled'; use list_jobs to check results. Queued for the scheduler; this tool cannot confirm it ran.
Inputs: jobs (required).
search_bunkerweb_docsARead-only
Search the official BunkerWeb documentation by meaning, in any language. Returns up to limit sections with title, URL, category, relevance and content, one per document. Use it for how-to and setting questions; use the API tools to read live state. Lower min_score if nothing matches.
Inputs: query (required), limit, category, min_score, +1 more. Returns: object
stop_instancesADestructive
Stop one instance (hostname) or every registered instance (all=true), never both; stopped instances serve no traffic until restarted outside this API. 502 if a stop is not acknowledged. Use reload_instances to apply config instead. Acts on the instances immediately.
Inputs: all, hostname.
unban_ipsADestructive
Lift bans for IPs on every instance, globally or per service; match the scope list_bans shows. An IP also blocked by CrowdSec may be refused (409). Use list_bans first to find them. Acts on the instances immediately.
Inputs: bans (required).
uninstall_pluginADestructive
Uninstall one UI-installed plugin by plugin_id; external and pro plugins are refused, 404 if absent. Use list_plugins type=ui to find IDs, install_plugins to add one (uninstall first to replace). Saved to the database; the scheduler applies it later; this tool cannot confirm it is live.
Inputs: plugin_id (required).
update_configADestructive
Edit, rename or move a snippet from text; omitted fields keep their value. UI/API-managed or template-derived only; templates cannot be renamed. A no-op is rejected. Use update_config_from_file for files. Saved to the database; the scheduler applies it later; this tool cannot confirm it is live.
Inputs: name (required), type (required), data, service, +4 more.
update_config_from_fileADestructive
Replace a snippet from a base64 file ({filename, content_base64}); without new_name the stem renames it. UI/API-managed or template-derived only; templates cannot be renamed. Use update_config for text. Saved to the database; the scheduler applies it later; this tool cannot confirm it is live.
Inputs: file (required), name (required), type (required), service, +4 more.
update_global_configADestructive
Set global settings from key-value pairs; settings you omit are kept, values are stored as strings. Use update_service for one service's settings. Saved to the database; the scheduler applies it later; this tool cannot confirm it is live.
Inputs: config (required).
update_instanceADestructive
Change a registered instance's name, ports, HTTPS flag, server_name or method; omitted fields keep their value. Unknown or read-only instances are rejected. Use create_instance for a new host. Saved to the database; the scheduler applies it later; this tool cannot confirm it is live.
Inputs: hostname (required), name, port, method, +3 more.
update_serviceADestructive
Change a service's settings, rename it or set is_draft; needs MULTISITE=yes. Unknown or externally owned keys are skipped, and a receipt reads back the stored values. Use update_global_config for global. Saved to the database; the scheduler applies it later; this tool cannot confirm it is live.
Inputs: service (required), is_draft, variables, server_name.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 37 tools
Despite 37 tools, each targets a distinct resource+action and descriptions explicitly cross-reference siblings (ping_api vs diagnose_bunkerweb vs ping_instances; list_instances vs get_instance; stop_instances vs reload_instances; text vs file variants of config tools). Boundary cases like create_config vs create_configs_from_files or list_bans vs list_cache_files are spelled out in-line, so an agent can reliably choose.
Consistent verb_noun pattern throughout (list_/get_/create_/update_/delete_/ping_/run_ + resource), with singular vs plural used meaningfully to signal single-item vs batch operations (get_instance vs delete_instances, ban_ips vs list_bans). No camelCase or style mixing.
The 37 tools span roughly eight real sub-domains (instances, services, global config, config snippets, plugins, jobs, cache files, bans) so most earn their place, but the total is heavy and some pairs (create_config/create_configs_from_files, update_config/update_config_from_file, ping_api/diagnose_bunkerweb) could be consolidated via parameters.
Coverage is strong: full CRUD on instances, services, global config and snippets, plus plugin install/uninstall, ban/unban, cache read/delete, job triggering, diagnostics and docs search. Minor gaps remain around API token lifecycle (create only, no list/revoke) and instance start (stop exists but restart is explicitly out of scope).
Maintenance
Related MCP Connectors
The official MCP Server for the Mux API
Official xCloud MCP: manage servers, sites, WordPress, SSL, backups and deploys from any MCP client.
MCP server for Superserve sandboxes: create, exec, and manage Firecracker microVMs
Official Porkbun MCP server: domains, DNS, SSL, hosting and Cloudflare via the Porkbun API.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server that wraps CubeCoders AMP to list, inspect, and control game-server instances.85MIT
- FlicenseNot gradedqualityDmaintenanceA production-ready MCP server providing file, system, math, and text utilities through a simple CLI client.-
- AlicenseNot gradedqualityBmaintenanceMCP server for the Mobilerun platform, exposing tools for device control, workflow automation, task management, and platform operations via a stateless HTTP or stdio interface with bearer-token authentication and policy-based access control.1Apache 2.0
- AlicenseNot gradedqualityAmaintenanceAggregates multiple backend MCP servers (Stdio, SSE, and Streamable HTTP) into a single hub, exposing their combined tools and resources through unified SSE or Streamable HTTP endpoints, or as a Stdio server, while routing requests to the correct backend. Adds API-key/bearer-token endpoint security, per-tool enable/disable and renaming, and an optional web admin UI with live config reload, install monitoring, and a web terminal.120 npmMIT