Skip to main content

enoch-mcp

enoch-mcp is a local Model Context Protocol (MCP) stdio server for the Enoch FastAPI control-plane API. It lets MCP clients such as Claude Desktop, Cursor, Copilot, and Windsurf inspect and operate a running Enoch instance through tools.

This MCP server is built for the Enoch project: alias8818/enoch-agentic-research-system.

This package is a thin HTTP bridge. It does not reimplement Enoch business logic.

What it does

  • Registers MCP tools for Enoch control-plane and core endpoints.
  • Sends requests to a configured Enoch API URL.
  • Adds Authorization: Bearer <token> to every API request.
  • 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.

What it does not do

  • It does not run shell 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 add telemetry or analytics.
  • 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.

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

MCP client setup

Claude Desktop

Add an entry like this to claude_desktop_config.json:

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

For local development, point Claude Desktop 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"
      }
    }
  }
}

Cursor

Add an MCP server entry that runs the same stdio command:

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

Use the equivalent MCP server settings for other clients that support local stdio MCP servers.

Tools

Read-only tools

These tools are registered with readOnlyHint=true.

Tool Endpoint Purpose
enoch_status GET /control/api/status Full control-plane status, dispatch safety, counts, warnings, and conflicts.
enoch_queue_health GET /control/api/queue-health Queue health, worker freshness, alert findings, and recent events.
enoch_queue_list GET /control/api/queues/{status} Queue rows for active, queued, blocked, or paused.
enoch_papers_list GET /control/api/papers Paginated paper listing.
enoch_paper_detail GET /control/api/papers/{paper_id} Paper detail with related project, run, events, and warnings.
enoch_paper_artifact GET /control/api/papers/{paper_id}/artifact/{field} Artifact content served by the Enoch API.
enoch_reviews_list GET /control/api/paper-reviews Publication review queue.
enoch_review_next GET /control/api/paper-reviews/next Next review candidate.
enoch_events GET /control/api/events Event log query.
enoch_core_health GET /enoch-core/health Enoch core health and mode.
enoch_core_queue_projection GET /enoch-core/projections/queue Core queue projection.
enoch_core_paper_candidates GET /enoch-core/candidates/paper-draft or /paper-polish Next draft or polish candidate.

Mutating tools

These tools are registered as non-read-only and include userApproval metadata. MCP annotations and metadata are hints to clients; confirmation behavior depends on the MCP client.

Tool Endpoint Safety behavior
enoch_dispatch POST /control/dispatch-next Defaults to dry_run=true.
enoch_pause POST /control/pause Requires an explicit reason.
enoch_resume POST /control/resume Requires an explicit tool call.
enoch_preflight POST /control/worker/preflight Checks worker health; does not dispatch by itself.
enoch_intake_notion POST /control/intake/notion-ideas Defaults to dry_run=true.
enoch_review_claim POST /control/api/paper-reviews/{paper_id}/claim Claims a review.
enoch_review_checklist POST /control/api/paper-reviews/{paper_id}/checklist/{item_id} Updates one checklist item.
enoch_review_status POST /control/api/paper-reviews/{paper_id}/status Updates review status.
enoch_draft_paper POST /control/papers/draft-next Requests drafting for the next paper.
enoch_rewrite_draft POST /control/api/paper-reviews/{paper_id}/rewrite-draft Requests draft rewrite.

Live smoke test

A live smoke script is included for checking a running Enoch instance before publishing or changing client configuration:

ENOCH_API_TOKEN='<token>' uv run python scripts/live_smoke.py --api-url http://localhost:8787

The script:

  • verifies that 22 tools are registered;
  • verifies approval metadata on mutating tools;
  • calls read-only tools against the configured Enoch API;
  • reads one paper detail and one artifact when available;
  • calls only safe mutating paths: dispatch dry-run, worker preflight, and Notion intake dry-run.

It does not print the bearer token.

Development

uv sync --dev
uv run ruff check .
uv run pytest
uv build

Run the MCP server from a checkout:

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

The server uses stdio transport, so it waits for MCP protocol messages on standard input.

Error handling

  • HTTP 4xx/5xx responses from Enoch are returned as MCP tool errors that include the status code and response body.
  • Network failures are returned as transport errors.
  • Missing bearer tokens are reported before a request is sent.

Security notes

  • Treat ENOCH_API_TOKEN like any other credential.
  • Prefer environment variables or your MCP client's secret storage over hard-coded tokens.
  • Do not expose an Enoch API endpoint to networks or users that should not operate the control plane.
  • Mutating tool approval prompts are MCP-client dependent; review your client behavior before enabling mutating workflows.

License

MIT

Release files for enoch-mcp 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for enoch-mcp 0.1.1
File Size Uploaded
enoch_mcp-0.1.1.tar.gz 60.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for enoch-mcp 0.1.1
File Interpreter ABI Platform
enoch_mcp-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 72.4 kB

Release files / enoch_mcp-0.1.1.tar.gz

Download URL enoch_mcp-0.1.1.tar.gz
Size 60.4 kB
Tags Source
SHA-256 checksum
How to use checksums
b003b182894c25a5fb3984621dd6fab8f52aa3b12b66c1dbdfcbb881df0414f8
BLAKE2b-256 checksum
How to use checksums
afcb2f63fa50114e32380392d39fbf3fc8262abe650f3f0e1237233171137904
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / enoch_mcp-0.1.1-py3-none-any.whl

Download URL enoch_mcp-0.1.1-py3-none-any.whl
Size 12.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f1aa5948e1701584e63dbcb1a37a8e046c75a8f58ff648ca29178859dbb6b836
BLAKE2b-256 checksum
How to use checksums
c2270ce629351e50054b1ea5de6826788e0f5cee65c846aebf7c55f5ab77c039
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page