nomad-mcp
Allows interaction with a HashiCorp Nomad cluster, providing tools for reading cluster state (jobs, allocations, nodes, deployments) and optionally managing jobs by stopping, scaling, restarting allocations, and submitting job specs.
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., "@nomad-mcp what jobs are currently running?"
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.
nomad-mcp
An MCP server that exposes a HashiCorp Nomad cluster as tools for MCP-compatible AI agents — Claude Code, Claude Desktop, OpenCode, Cursor, etc. It speaks standard MCP over stdio, so any client that supports stdio MCP servers works out of the box.
Tools
Read-only, always available:
list_jobs,get_job,get_job_allocations,get_job_deployments,get_job_evaluationsget_allocation,get_allocation_logslist_nodes,get_nodelist_deployments,get_deploymentlist_namespaces
Write tools, disabled by default (see Write access):
stop_job— stop a job, optionally purge itscale_task_group— set a task group's countreschedule_allocation— stop a single allocation so Nomad reschedules it as a new allocation (POST /v1/allocation/:id/stop)restart_allocation— restart task(s) in an allocation in place, same allocation ID (POST /v1/client/allocation/:id/restart)register_job— submit a job from HCL or JSON (create or update)
Related MCP server: Scout MCP Server
Setup
Requires Node.js 18+.
npm install
cp .env.example .env # then edit .env with your Nomad address/tokenOr, if you use pixi and don't want a system Node install:
pixi run installConfiguration
Standard nomad CLI environment variables:
Variable | Default | Description |
|
| Nomad HTTP API address |
| (none) | ACL token, sent as |
| (none) | Default namespace applied when a tool call doesn't specify one |
|
| Skip TLS certificate verification |
| (none) | Path to a CA bundle for a private/internal CA |
Write access
Write tools are off by default. An agent connected to this server can only read cluster state until you explicitly opt in:
NOMAD_MCP_WRITE_MODE=onTo allow only specific write tools instead of all four:
NOMAD_MCP_WRITE_MODE=on
NOMAD_MCP_WRITE_TOOLS=stop_job,scale_task_groupSee AUTOMATION.md for recipes on using this to automate recurring Nomad tasks (health checks, auto-restart, scheduled scaling), including running an agent headlessly on a schedule instead of interactively.
Using it with an MCP client
The server is started as node /path/to/nomad-mcp/src/index.js, with config passed via environment variables. Point any MCP client's stdio server config at that command.
Claude Code:
claude mcp add nomad node /path/to/nomad-mcp/src/index.js \
--env NOMAD_ADDR=https://nomad.example.com \
--env NOMAD_TOKEN=your-tokenClaude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"nomad": {
"command": "node",
"args": ["/path/to/nomad-mcp/src/index.js"],
"env": {
"NOMAD_ADDR": "https://nomad.example.com",
"NOMAD_TOKEN": "your-token"
}
}
}
}OpenCode (opencode.json / ~/.config/opencode/opencode.json):
{
"mcp": {
"nomad": {
"type": "local",
"command": ["node", "/path/to/nomad-mcp/src/index.js"],
"environment": {
"NOMAD_ADDR": "https://nomad.example.com",
"NOMAD_TOKEN": "your-token"
}
}
}
}(Check OpenCode's current docs for the exact config key names if this has changed — the important part is that it runs the same stdio command with the same environment variables.)
Security notes
NOMAD_TOKENgrants whatever an ACL policy allows — scope it to a policy with only the access this server actually needs (read-only policy if you're not enabling write mode).Write mode lets a connected agent stop jobs, scale them, restart allocations, and submit new job specs. Only enable it for a token/environment you're comfortable an LLM acting autonomously could affect.
register_jobsubmits directly to/v1/jobswith no dry-run step — review what an agent intends to submit before asking it to call this tool against a production namespace.
Available Tools
12 toolsget_allocationB
Get details of a single allocation, including task states and events.
Inputs: id (required).
get_allocation_logsA
Fetch recent stdout/stderr log output for a task in an allocation.
Inputs: task (required), allocId (required), type, tailBytes.
get_deploymentC
Get details of a single deployment.
Inputs: id (required).
get_jobA
Get the full spec and status of a single Nomad job by ID.
Inputs: id (required), namespace.
get_job_allocationsB
List allocations belonging to a job.
Inputs: id (required), namespace.
get_job_deploymentsC
List deployments for a job.
Inputs: id (required), namespace.
get_job_evaluationsA
List evaluations for a job (useful for diagnosing why a job isn't placing).
Inputs: id (required), namespace.
get_nodeA
Get details of a single Nomad client node, including allocations and resource usage.
Inputs: id (required).
list_deploymentsC
List recent deployments across the cluster.
Inputs: namespace.
list_jobsA
List Nomad jobs, optionally filtered by name prefix and namespace.
Inputs: prefix, namespace.
list_namespacesA
List Nomad namespaces.
Inputs: no named parameters.
list_nodesA
List client nodes in the Nomad cluster.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 12 tools
Every tool maps to a distinct resource and scope, with list_ and get_ clearly separating collection vs single-detail operations. Potentially similar tools like get_job_deployments and list_deployments are disambiguated by job-scoped vs cluster-scoped descriptions.
All tools follow a consistent list_/get_ + resource noun pattern in snake_case. Singular resources use get_, plural resources use list_, and job-scoped variants like get_job_allocations are predictable.
Twelve tools provide well-scoped coverage of Nomad's main observable resources: jobs, allocations, deployments, nodes, and namespaces. There is no obvious redundancy, and each tool serves a distinct inspection or diagnostic purpose.
As a read-only observability toolset, it covers the key Nomad resources needed for inspecting jobs, allocations, deployments, evalutions, and nodes. Minor gaps like no cluster-wide allocation list, no single evaluation detail, and no write/lifecycle operations prevent a perfect score if full Nomad management is expected.
Maintenance
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Your org's AI agents, tasks, runs, search, and brain files as MCP tools and resources.
Remote MCP server exposing your Node Command fleet (files, shell, processes, browser) to AI hosts.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceSelf-hosted AI orchestrator that monitors and manages homelab services, exposing them as MCP tools for LLMs to drive.4MIT

Scout MCP Serverofficial
AlicenseAqualityDmaintenanceEnables AI agents to interact with Scout Live platform capabilities through standardized MCP primitives, including tools for app management, deployment, and logging.612 npmMIT- AlicenseAqualityDmaintenanceEnables LLM agents to monitor and manage a Proxmox VE cluster, including cluster status, VM/container lifecycle, and node actions via MCP tools.8MIT
- FlicenseNot gradedqualityDmaintenanceExposes task management (add, list, complete tasks) and document search (RAG) as MCP tools for AI agents.-