DEV Community

M.S.
M.S.

Posted on

ephemora-cell 1.0.4: a stateless MCP tool server, now on PyPI!!

No initialize handshake. No session state. Restart or load-balance the server between calls — clients never notice. tools/list answers with CacheableResult fields (ttlMs: 3600000, cacheScope: "private") so hosts can cache the tool list, and unknown versions are rejected with -32022 naming the supported list — never silently swallowed.

Handshake-era clients (Claude Desktop, VS Code, Codex) keep working unchanged. Both eras, one process — with a test that runs them mixed against one server instance.

  1. get-policy now attests what execution actually grants We caught our own policy report underreporting the filesystem surface: it said preopens: [] while every core-module run actually grants the ephemeral sandbox dir as /sandbox. The fix derives the reported preopens from the same truth as the run witness — and a test now executes a real tool and fails CI if report and witness ever diverge again:

python
reported = engine.policy_for(spec) # what get-policy says
outcome = engine.execute(spec, params) # what actually ran
assert reported["preopens"] == \
outcome.report.security_baseline["preopens"]

  1. One version, three signals The previous wheel said 1.0.3 on the box and 1.0.1 on the wire. Version is now single-sourced — and a test enforces pyproject.toml == runtime version forever.

How we verified it
Fresh venv, plain pip install ephemora-cell, 13/13 acceptance checks against the published wheel: both MCP eras, version negotiation, policy/witness agreement, legacy compatibility unchanged. Bonus finding: the same echo call consumed identical fuel (21143) across two different installs on different machines — the determinism claim held in the wild.

Try it

bash
pip install ephemora-cell
ephemora-cell-mcp # bundled clock + echo; --tools-dir for your own
Feedback welcome — repo, issues and the full CHANGELOG are at https://github.com/MichaelS1011/ephemora-cell

Top comments (2)

Collapse
 
reidmarlow profile image
Reid Marlow

Skipping initialize and caching tools/list fixes the cold-start penalty when agents spin up short-lived processes. The part that usually bites in production is tool schema drift. Once hosts cache the schema for an hour, an in-place server update causes parameter mismatches until the TTL expires unless you force client disconnects.

Collapse
 
michaels1011 profile image
M.S.

Feedback welcome — repo, issues and the full CHANGELOG are at github.com/MichaelS1011/ephemora-cell