Add to your AI client
mnm mcp serve speaks MCP (JSON-RPC 2.0) over stdio. One command wires it into your assistant as an MCP tool. Prefer HTTP? See Serving over HTTP below.
- Claude Code
- Codex
- Cursor
claude mcp add midnight-manual -- mnm mcp serve
Add to ~/.codex/config.toml:
# ~/.codex/config.toml
[mcp_servers.midnight-manual]
command = "mnm"
args = ["mcp", "serve"]
Add to ~/.cursor/mcp.json (global) or .cursor/mcp.json (per-project):
// ~/.cursor/mcp.json
{ "mcpServers": { "midnight-manual": { "command": "mnm", "args": ["mcp", "serve"] } } }
Restart your client, then ask a Midnight question. Your assistant calls the search tool, retrieves matching passages, and cites the source it used.
Serving over HTTPโ
mnm mcp serve --http serves the same 13 tools as stateless Streamable HTTP (POST /mcp) on 127.0.0.1:2400:
mnm mcp serve --http
claude mcp add --transport http midnight-manual http://127.0.0.1:2400/mcp
One long-running server can back several clients at once โ useful when stdio would spawn a process per client, or when the server runs in a container. To poke at it interactively, point the MCP Inspector (npx @modelcontextprotocol/inspector) at http://127.0.0.1:2400/mcp with the transport set to Streamable HTTP; the server answers browser preflights and grants loopback origins, so both the Inspector UI and its CLI mode work.
Pass --bind <IP:PORT> (or set MIDNIGHT_MANUAL_MCP_BIND) to move the listener. The HTTP transport has no authentication: on the default loopback bind that costs you nothing, but a non-loopback bind means every caller spends your rate tier and your VOYAGE_API_KEY. The server refuses cross-site browser origins on loopback binds, and warns loudly when you bind a public address โ never silently.