Skip to main content
Glama

enoch-mcp

enoch-mcp bridge diagram

enoch-mcp is a local Model Context Protocol stdio server for a configured Enoch FastAPI control-plane API. It lets MCP clients inspect and operate Enoch through typed tools without exposing a raw shell or reimplementing Enoch business logic.

What it does

  • Registers MCP tools for Enoch control-plane, Dashboard V1, and core endpoints.

  • Sends requests to a configured Enoch API URL.

  • Adds Authorization: Bearer <token> to API requests using the configured token.

  • Returns Enoch API responses to the MCP client.

  • Marks read-only tools with MCP read-only annotations.

  • Marks mutating tools as non-read-only and adds approval metadata.

  • Keeps safe defaults for dry-run operations.

  • Optionally probes configured CPU/GPU workers directly through worker APIs or allowlisted SSH diagnostics.

Related MCP server: JSON-RPC

What it does not do

  • It does not expose a raw shell tool.

  • It does not accept arbitrary SSH commands.

  • It does not read or write local artifact files directly.

  • It does not call language models.

  • It does not cache, retry, queue, or schedule work.

  • It does not bypass Enoch authentication or authorization.

Requirements

  • Python 3.11 or newer

  • A running Enoch API, normally at http://localhost:8787

  • An Enoch API bearer token

  • An MCP client that can run local stdio servers

Installation

Run from PyPI with uvx:

uvx enoch-mcp --api-url http://localhost:8787 --api-token '<token>'

Or configure with environment variables:

export ENOCH_API_URL='http://localhost:8787'
export ENOCH_API_TOKEN='<token>'
uvx enoch-mcp

For local development from a checkout:

git clone https://github.com/alias8818/enoch-mcp.git
cd enoch-mcp
uv sync --dev
uv run enoch-mcp --api-url http://localhost:8787 --api-token '<token>'

Configuration

Option

Environment variable

Default

Description

--api-url

ENOCH_API_URL

http://localhost:8787

Base URL for the Enoch API.

--api-token

ENOCH_API_TOKEN

none

Bearer token for the Enoch API.

--worker-probes-json

ENOCH_WORKER_PROBES_JSON

none

Optional JSON map for direct worker diagnostics.

--worker-probes-file

ENOCH_WORKER_PROBES_FILE

none

Optional path to a JSON map for direct worker diagnostics.

The token is required. If it is missing, tool calls fail before making an HTTP request.

Optional worker probes

Worker probes are disabled unless ENOCH_WORKER_PROBES_JSON or ENOCH_WORKER_PROBES_FILE is configured. This keeps the default package a thin control-plane bridge. When configured, the MCP exposes named diagnostics for worker truth: API health, worker-gate dashboard status, active process markers, bounded log tails, disk space, and expected artifact presence.

Example:

{
  "cpu": {
    "api_url": "http://127.0.0.1:18788",
    "api_token": "worker-api-token",
    "service_name": "enoch-control-plane",
    "project_root": "/srv/enoch/projects"
  },
  "gpu": {
    "api_url": "http://127.0.0.1:18789",
    "api_token": "worker-api-token",
    "ssh_host": "worker-gpu.example.internal",
    "ssh_user": "enoch",
    "service_name": "enoch-control-plane",
    "project_root": "/srv/enoch/projects",
    "log_paths": ["/var/log/enoch-control-plane.log"]
  }
}

Supported fields per lane:

  • api_url: worker-gate base URL. Used first for /healthz, /dashboard/api, /dashboard/api/run/{run_id}, and /project-status/{project_id}.

  • api_token: worker bearer token. Treated as secret.

  • ssh_host, ssh_user, ssh_port: optional SSH fallback/debug target.

  • service_name: systemd unit name for service checks and journal tails.

  • project_root, state_dir: fixed worker roots used for disk and artifact checks.

  • log_paths: fixed worker-gate log paths that may be tailed.

SSH probes only run fixed diagnostic commands. They do not accept arbitrary shell input from the MCP client. User-supplied IDs are limited to safe run/project identifier characters, log output is bounded, SSH uses batch mode and no stdin, and the recommended deployment is a read-only worker user or forced-command policy.

MCP client setup

Claude Desktop

{
  "mcpServers": {
    "enoch": {
      "command": "uvx",
      "args": ["enoch-mcp"],
      "env": {
        "ENOCH_API_URL": "http://localhost:8787",
        "ENOCH_API_TOKEN": "replace-with-token"
      }
    }
  }
}

For local development, point the MCP client at the checkout:

{
  "mcpServers": {
    "enoch": {
      "command": "uv",
      "args": ["--directory", "/path/to/enoch-mcp", "run", "enoch-mcp"],
      "env": {
        "ENOCH_API_URL": "http://localhost:8787",
        "ENOCH_API_TOKEN": "replace-with-token"
      }
    }
  }
}

Use the equivalent local stdio-server settings for Cursor, Copilot, Windsurf, or other MCP clients.

Development

uv sync --dev
uv run pytest -q
gitleaks detect --no-git --redact

Public-safety note

This package is public. Examples must use placeholders and local URLs only. Do not publish private hostnames, LAN/Tailscale IPs, operator paths, or live tokens.

Available Tools

41 tools
enoch_automation_readinessA
Read-onlyIdempotent

Canonical long-haul readiness check used to answer whether Enoch can run unattended.

Inputs: no named parameters.

enoch_core_healthA
Read-onlyIdempotent

Get Enoch core health and operating mode.

Inputs: no named parameters.

enoch_core_paper_candidatesA
Read-onlyIdempotent

Get the next paper draft or polish candidate from Enoch core.

Inputs: kind (required), mode.

enoch_core_queue_projectionC
Read-onlyIdempotent

Get Enoch core queue projection.

Inputs: mode.

enoch_dispatchB

Dispatch the next queued item. Defaults to dry_run=True.

Inputs: requested_by (required), dry_run, force_preflight.

enoch_dispatch_oneC

Dispatch one explicit queued project. Defaults to dry_run=True.

Inputs: project_id (required), requested_by (required), dry_run, force_preflight.

enoch_draft_paperC

Draft the next eligible paper. Defaults to dry_run=True.

Inputs: requested_by (required), dry_run, force.

enoch_eventsC
Read-onlyIdempotent

Query the bounded Dashboard V1 event log.

Inputs: event_id, entity_type, entity_id, event_type, +5 more.

enoch_intake_ideasA

Ingest ideas through the current control-plane intake API. Defaults to dry_run=True.

Inputs: ideas (required), idempotency_key, source, dry_run, +6 more.

enoch_intake_notionC

Ingest Notion ideas. Defaults to dry_run=True.

Inputs: ideas (required), idempotency_key, source, dry_run.

enoch_intake_statusD
Read-onlyIdempotent

Current control-plane idea intake status.

Inputs: page_size, include_latest_payload.

enoch_lanesC
Read-onlyIdempotent

Bounded worker lane state and lane-aware next candidate.

Inputs: no named parameters.

enoch_launch_followupC

Launch the next bounded follow-up candidate. Defaults to dry_run=True.

Inputs: project_id, requested_by, dry_run, max_followup_depth.

enoch_overviewB
Read-onlyIdempotent

Bounded Dashboard V1 overview: operator counts, lanes, papers, top actions, events.

Inputs: active_limit, event_limit.

enoch_paper_artifactC
Read-onlyIdempotent

Read a paper artifact's content through the Enoch API.

Inputs: paper_id (required), field (required).

enoch_paper_detailB
Read-onlyIdempotent

Get paper detail with project, run, events, warnings, and missing artifacts.

Inputs: paper_id (required).

enoch_papers_listB
Read-onlyIdempotent

List papers with optional search/status filtering.

Inputs: search, status, page, page_size, +1 more.

enoch_pauseB
Destructive

Pause the Enoch queue.

Inputs: reason (required), paused_by, maintenance_mode.

enoch_preflightC
Idempotent

Run worker health preflight.

Inputs: payload.

enoch_probe_workerC
Read-onlyIdempotent

Optional direct worker probe: health, wake-gate status, processes, and disk.

Inputs: lane, run_id.

enoch_project_detailC
Read-onlyIdempotent

Bounded project detail with related queue/run/paper rows and events.

Inputs: project_id (required), event_limit.

enoch_projectsC
Read-onlyIdempotent

Bounded Dashboard V1 project list.

Inputs: status, search, cursor, page_size, +1 more.

enoch_queue_alert_checkC

Run queue alert/stale-active reconciliation. Defaults to dry_run=True.

Inputs: requested_by (required), dry_run, refresh_worker, force_notify, +4 more.

enoch_queue_healthB
Read-onlyIdempotent

Queue health with worker freshness, alert findings, active runs, and recent events.

Inputs: refresh_worker.

enoch_queue_listB
Read-onlyIdempotent

List queue items by status: active, queued, blocked, or paused.

Inputs: status (required), search, page_size.

enoch_reconcile_stale_laneC

Explain or reconcile one stale active lane. Defaults to dry_run=True.

Inputs: requested_by (required), dry_run, refresh_worker, lane_key, +3 more.

enoch_research_qualityA
Read-onlyIdempotent

Latest research quality readiness report.

Inputs: no named parameters.

enoch_research_run_cycleC

Run one bounded research autopilot cycle. Defaults to dry_run=True.

Inputs: requested_by (required), dry_run, refresh_worker.

enoch_resumeC

Resume the Enoch queue.

Inputs: resumed_by, maintenance_mode.

enoch_review_checklistC

Update a review checklist item.

Inputs: paper_id (required), item_id (required), status (required), note.

enoch_review_claimC

Claim a paper review.

Inputs: paper_id (required), claimed_by (required).

enoch_review_nextC
Read-onlyIdempotent

Get the next unreviewed publication review candidate.

Inputs: paper_status.

enoch_reviews_listC
Read-onlyIdempotent

List publication reviews with checklist progress and rank scores.

Inputs: review_status, paper_status, search, page, +2 more.

enoch_review_statusD

Update review status.

Inputs: paper_id (required), review_status (required), updated_by.

enoch_rewrite_draftC

Rewrite a paper draft through Enoch's API.

Inputs: paper_id (required), requested_by (required), force.

enoch_run_detailC
Read-onlyIdempotent

Bounded run detail with related queue/paper rows and events.

Inputs: run_id (required), event_limit.

enoch_runsC
Read-onlyIdempotent

Bounded Dashboard V1 run list.

Inputs: state, project_id, search, cursor, +2 more.

enoch_statusC
Read-onlyIdempotent

Full system status: dispatch safety, flags, counts, active items, warnings, conflicts.

Inputs: refresh_worker.

enoch_v1_queueC
Read-onlyIdempotent

Bounded Dashboard V1 queue list with cursor pagination.

Inputs: queue, status, search, cursor, +2 more.

enoch_worker_artifactsC
Read-onlyIdempotent

Optional expected artifact presence check for a worker project/run.

Inputs: lane, project_id, run_id.

enoch_worker_logsB
Read-onlyIdempotent

Optional bounded worker log tail from allowlisted log sources.

Inputs: lane, log_kind, run_id, lines.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.7/5.0

    Scored across 41 tools

    Disambiguation3/5

    Many tools have overlapping purposes (e.g., dispatch vs dispatch_one, multiple queue inspection tools, and paper-related actions). Descriptions differentiate them, but the large number of similar operations creates potential for misselection by an agent.

    Naming Consistency4/5

    Most tools follow a consistent enoch_verb_noun pattern in snake_case. A few deviate (e.g., enoch_worker_artifacts, enoch_worker_logs) but overall the pattern is clear and predictable.

    Tool Count3/5

    With 41 tools, the surface is quite large. While the domain spans multiple subsystems (core, queue, papers, reviews, workers), the number feels heavy and could benefit from consolidation or more granular grouping.

    Completeness3/5

    The tool set covers core operations like health, queue management, paper drafting, and review workflows. However, there are missing CRUD operations for projects and some actions lack explicit commit/undo counterparts.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      A MCP server that exposes OpenAPI schema information to LLMs like Claude. This server allows an LLM to explore and understand large OpenAPI schemas through a set of specialized tools, without needing to load the whole schema into the context
      308 npm
      50
      MIT
    • A
      license
      B
      quality
      D
      maintenance
      A Model Context Protocol (MCP) server based on OpenRPC, providing JSON-RPC function invocation and method discovery services.
      2
      1
      Apache 2.0