ops-toolbox
The ops-toolbox server provides MCP tools for operational support: tailing logs, checking endpoint health, searching a runbook, and adding entries.
Tail log files: Retrieve up to 1000 lines from a log file within a configured root directory, with optional case-insensitive text filtering. Designed to prevent path traversal and reads only the last 256KB to avoid memory issues.
Check HTTP endpoints: Request a URL and report status code and latency. Configurable timeout (default 5000ms) and expected healthy status code (default 200) to verify service response.
Search runbook: Query a local JSON runbook of known symptoms and fixes using keywords; returns up to 25 matching entries (default 5).
Add runbook entries: Record a new problem with a title, fix steps, optional symptoms and tags. Entries are written atomically to prevent data corruption.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ops-toolbox search runbook for how to fix a 502"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ops-toolbox
A small Model Context Protocol server that gives an assistant four things a support engineer actually reaches for: tail a log, check whether an endpoint is answering, search a runbook of past fixes, and write a new fix back into it.
No dependencies. It is plain Node, node server.js and it runs.
What MCP is, briefly
Model Context Protocol is a standard way to hand an AI client a set of tools it
can call. The client starts your server as a subprocess and they speak JSON-RPC
2.0 over stdin and stdout, one message per line. The client asks tools/list to
find out what exists, then tools/call to run one and get the result back as
text.
That is the whole idea. There is no framework requirement, which is why this server has no dependencies: the protocol is small enough to implement directly, and doing it directly makes it obvious what is going on.
Two things matter when you write one:
stdout belongs to the protocol. A stray
console.logputs a non-JSON line in the stream and the client drops the connection. Every diagnostic in this server goes to stderr, which the client is free to capture or ignore.A tool failing is not a protocol failure. A missing file comes back as a normal result flagged
isError, so the model can read the message and correct itself. Protocol errors are reserved for things like an unknown tool name or a missing required argument.
Related MCP server: automation-health-mcp
The tools
Tool | What it does |
| Last N lines of a log file, with an optional case-insensitive filter. Confined to a configured log root. |
| Requests a URL and reports status code and latency, so you can tell "running" from "actually answering". |
| Searches a local JSON runbook of symptoms and their fixes. |
| Records a new symptom and fix so the next person does not rediscover it. |
Two details worth pointing out because they are the kind of thing that bites you in production:
tail_logresolves the requested path and rejects anything that lands outside the configured root. A model will happily pass../../../etc/shadowif you let it.tail_logreads only the last 256 KB of a file rather than the whole thing. A tail of a rotated 4 GB log should not be an out-of-memory error.runbook_addwrites to a temp file and renames it over the original. A rename on the same filesystem is atomic, so a crash halfway through cannot leave a truncated runbook behind.
Requirements
Node 20 or newer. Nothing else.
Install
git clone https://github.com/coreyhiggins/mcp-server-example.git
cd mcp-server-example
node selftest.js # confirm it works before wiring it upThere is no npm install step because there is nothing to install.
Configuration
Both paths come from the environment so the same server can point at sample data during development and at real paths on a server.
Variable | Default | Purpose |
|
| Directory |
|
| JSON file the runbook tools read and write. |
Wiring it into a client
Claude Desktop
Edit the config file, then restart the app.
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"ops-toolbox": {
"command": "node",
"args": ["/absolute/path/to/mcp-server-example/server.js"],
"env": {
"OPS_LOG_ROOT": "/var/log",
"OPS_RUNBOOK": "/absolute/path/to/mcp-server-example/data/runbook.json"
}
}
}
}Use absolute paths. The client does not start the server in your shell's working directory, so a relative path will not resolve the way you expect.
Claude Code
claude mcp add ops-toolbox \
--env OPS_LOG_ROOT=/var/log \
--env OPS_RUNBOOK=/absolute/path/to/mcp-server-example/data/runbook.json \
-- node /absolute/path/to/mcp-server-example/server.jsThen claude mcp list should show it connected.
Driving it by hand
The server is just a program reading lines on stdin, so you can talk to it without any client at all. This is the fastest way to debug one:
printf '%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25"}}' \
'{"jsonrpc":"2.0","id":2,"method":"tools/list"}' \
'{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"runbook_search","arguments":{"query":"nginx 502"}}}' \
| node server.jsSelf-test
node selftest.js20 assertions covering the tools, the JSON-RPC layer, and one real end-to-end
handshake against a spawned server over stdio. The HTTP checks hit a throwaway
server this script starts on 127.0.0.1, so the test needs no network access.
Exits non-zero if anything fails.
Layout
server.js JSON-RPC plumbing, stdio loop, protocol version negotiation
tools.js the four tools and their schemas
selftest.js the one runnable check
data/ seed runbook
sample-logs/ a log file to point tail_log at while you try itHow this is used in production
I run Ubuntu servers where the first ten minutes of any incident are the same three questions: what does the log say, is the service actually answering, and have we seen this before. Those questions are what these four tools are. Putting them behind MCP means I can ask in plain language and get the answer without switching to a terminal, and the runbook grows every time something breaks instead of living in my head.
The security choices in here are not decoration. A tool that takes a file path from a model is an untrusted input path, so it gets a root confinement check, a read cap, and an atomic write. Same review I would give any script that runs on a box with real users on it.
License
MIT
Available Tools
4 toolscheck_endpointCheck an HTTP endpointA
Request a URL and report whether it returned the expected status code, plus how long it took. Use it to confirm a service is actually answering, not just running.
Inputs: url (required), timeoutMs, expectStatus.
runbook_addAdd a runbook entryA
Record a new symptom and its fix in the local runbook so the next person does not have to rediscover it.
Inputs: fix (required), title (required), tags, symptoms.
runbook_searchSearch the runbookA
Search the local runbook of known symptoms and their fixes. Use this before diagnosing an issue from scratch, since a past fix is usually faster than a fresh investigation.
Inputs: query (required), limit.
tail_logTail a log fileA
Read the last N lines of a log file under the configured log root, optionally filtered to lines containing a substring (case-insensitive).
Inputs: path (required), lines, contains.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 4 tools
Each tool targets a distinct operation: log tailing, endpoint checking, and runbook search/add. There is no overlap in purpose or resource type.
Names are clear and readable, but they follow two patterns: verb_noun (tail_log, check_endpoint) and noun_verb (runbook_search, runbook_add). This minor inconsistency is not confusing but prevents a perfect score.
With 4 tools, the set is well-scoped for an operations toolbox. Each tool serves a clear purpose without redundancy or bloat.
The set covers the primary operations for its domain: log inspection, endpoint validation, and runbook management (search/add). Minor gaps like runbook deletion exist, but the core workflow is complete.
Maintenance
Related MCP Connectors
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
A MCP server built for developers enabling Git based project management with project and personal…
Independent trust scores, tool surfaces and change history for MCP servers.
MCP server exposing Kettle Logic insight articles & industry guidance as tools + resources.
Related MCP Servers
- AlicenseBqualityDmaintenanceSmall production-oriented MCP server for diagnosing incidents from Elasticsearch logs with unknown schema. It provides tools for log discovery, retrieval, and issue diagnosis.6MIT
- AlicenseAqualityDmaintenanceAn MCP server for auditing automation health, finding failures, stale logs, and non-functional endpoints that report success while quietly failing.7MIT
- AlicenseAqualityDmaintenanceOffline MCP server with runbooks for high-volume logs, metrics, traces, and event streams. Search and diagnose symptoms without external dependencies.4MIT
- FlicenseNot gradedqualityDmaintenanceMCP server for observability that provides tools for log search, metrics inspection, SQL querying, incident summaries, and service discovery.-