Farrier

AI agents (MCP)

Farrier is a Model Context Protocol server, so Claude (Desktop and Code), Gemini CLI, OpenAI Codex and any other MCP client can ask what expires next, check a domain's health or find zombie certificates. Agents are read-only unless you deliberately allow writes.

Tools

ToolDoesAccess
list_endpoints, get_endpointInventory, without connector configs or secretsread
expiring_certificatesCertificates expiring within N daysread
renewal_statusOpen and recent renewalsread
domain_healthTLS report card for an endpoint, or any host with the admin tokenread
find_zombiesZombie certificates from stored observationsread
forecastRenewal workload under the CA/B Forum scheduleread
renew_endpoint, cancel_renewalStart or cancel a renewalwrite

Write tools appear only when the session uses the admin token and the server has FARRIER_MCP_ALLOW_WRITES=1. Every call is logged as mcp:<client name>.

Connect locally (stdio)

The client starts farrier mcp on the machine with the data directory.

claude_desktop_config.json
{
  "mcpServers": {
    "farrier": {
      "command": "farrier",
      "args": ["--data", "/var/lib/farrier", "mcp"]
    }
  }
}
~/.codex/config.toml
[mcp_servers.farrier]
command = "farrier"
args = ["mcp"]
env = { FARRIER_DATA = "/var/lib/farrier" }

Over stdio the session counts as admin only when FARRIER_MCP_TOKEN equals FARRIER_API_TOKEN.

Connect remotely (Streamable HTTP)

The engine serves MCP at /mcp and requires a bearer token: the read token for read tools, the admin token for writes.

claude mcp add --transport http farrier https://farrier.example.com/mcp \
  --header "Authorization: Bearer $FARRIER_API_READ_TOKEN"

Browsers' Origin is checked to stop DNS-rebinding attacks. Only loopback pages and origins in FARRIER_MCP_ALLOWED_ORIGINS are accepted.

Ready-made configs for Claude Desktop, Claude Code, Gemini CLI, Codex and generic HTTP clients are in examples/mcp.