moo-mcp
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., "@moo-mcplist verbs on #42"
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.
moo-mcp
MCP server for LambdaMOO administration. Connects to a MOO's admin/wizard port over TCP, keeps the connection warm, and exposes structured tools for the operations you actually do when hacking on a MOO: eval expressions, list/program verbs (with auto read-back verification), add/remove properties, walk the inheritance chain.
Use with Claude Code or any other MCP-compatible client.
Why
The usual MOO admin loop is "telnet in, run a command, read the response, repeat" - slow and lossy when scripted, and @program famously prints "0 errors" even when the verb body didn't actually get stored as you expected. moo-mcp wraps that loop in a persistent process with proper request/response semantics and adds an automatic read-back verify on every verb program so silent corruption is impossible.
Related MCP server: mcp-odbc
Status
Alpha. Tested against LambdaMOO 1.8.3-Mongoose. Should work against any MOO whose admin port speaks the standard ;eval, @list, @program ... . protocol.
Install
pip install moo-mcpOr from source:
git clone https://github.com/<org>/moo-mcp
cd moo-mcp
pip install -e .Configure
moo-mcp is config-free out of the box - you must provide connection details via environment variables. There are no defaults pointing at any particular MOO.
Env var | Required | Description |
| yes | Hostname or IP of the MOO admin port |
| yes | TCP port (e.g. 7777, 3500) |
| yes | Wizard character name |
| yes | Wizard password |
| no | Seconds to wait for a response (default 15) |
| no |
|
| no |
|
| no |
|
Use with Claude Code
Add to ~/.claude.json:
{
"mcpServers": {
"moo": {
"command": "python",
"args": ["-m", "moo_mcp"],
"env": {
"MOO_HOST": "your.moo.example.com",
"MOO_PORT": "7777",
"MOO_USER": "Wizard",
"MOO_PASS": "supersecret"
}
}
}
}Or run directly:
MOO_HOST=... MOO_PORT=... MOO_USER=... MOO_PASS=... python -m moo_mcpTools
Tool | Description |
| Evaluate a MOO expression; returns parsed value or structured error |
| Read a verb body; returns header + numbered lines |
| Replace a verb body; auto-verifies by re-listing and diffing |
| Verb lifecycle |
| Property lifecycle |
| Check existence (returns the defining-object list) |
| List local verbs/properties on an object |
| Read or change an object's parent |
All tools return JSON results. MOO errors (E_PROPNF, traceback) become structured {error: {message, traceback}} objects rather than raw text.
Security
moo-mcp is a wizard-privileged admin tool, equivalent in capability to a logged-in human wizard at the MOO admin port. Anyone who can call its tools can do anything a wizard can. Run it in a trust boundary that matches.
Specific notes:
The stock MOO admin protocol is plaintext. Username and password are sent over the TCP socket unencrypted, the same way a
telnetsession would. If your MOO is not on the same host as the MCP and not already TLS-wrapped, either: (a) setMOO_TLS=trueif your MOO is fronted by stunnel or otherwise serves the admin port over TLS, or (b) run the MCP through an SSH tunnel to the MOO host.eval_moogives full wizard eval access. This is by design. Do not expose this MCP to untrusted clients.program_verbrejects bare-dot lines in the body (they would terminate the@programblock and let the rest land in the command parser). If you need a literal.line in MOO code, indent it.add_verbvalidates the verb arg-spec (dobj/iobjmust bethis/any/none,prepis allowlist-character-checked) to prevent breaking out of the MOO double-quoted literal during eval splice.set_property/add_propertyvalue serializer escapes backslashes, double quotes, carriage returns, line feeds, and NUL bytes in string values so a malicious property value cannot break out of the MOO source.Connection config rejects CR/LF/NUL in
MOO_USER/MOO_PASSto prevent command injection at login time.search_verbsaccepts user-provided regex. A pathological pattern can cause catastrophic backtracking. Python'srehas no built-in timeout. Trust the caller, or pre-validate patterns if you're exposing this to untrusted input.No persistent state: no on-disk caching, no logging of passwords, no telemetry. Connection credentials live only in env vars; in-flight commands live in process memory.
License
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
Run commands and read/write files on your servers over Termalin's keyless tunnels (hosted MCP).
Free, read-only security scanner for remote MCP servers, before you connect them.
Remote MCP server to read and manage your Atako AI agents, messages, files, and integrations.
Related MCP Servers
- AlicenseBqualityBmaintenanceMCP server to help manage a WHMCS installation.6225 npm20MIT
- AlicenseNot gradedqualityDmaintenanceA Python MCP server that connects to any ODBC data source and exposes schema discovery + query tools. Read-only by default, write access available per-connection.2MIT
- FlicenseNot gradedqualityBmaintenanceGeneral-purpose MCP server with built-in tools for HTTP, JSON, and datetime operations, supporting pluggable modules and security defaults.-
- FlicenseAqualityCmaintenanceA modular Python MCP server providing tools for text echoing, system information, time queries, arithmetic, file reading, and more, designed for seamless integration with Cline and other MCP clients.6-