Metadata-Version: 2.4
Name: memoflow-mcp
Version: 0.1.0
Summary: Durable MCP tool adapter for the MemoFlow Python SDK
License-Expression: MIT
Project-URL: Homepage, https://memoflow.io
Project-URL: Repository, https://github.com/evigasoft/memoflow
Project-URL: Changelog, https://github.com/evigasoft/memoflow/blob/main/packages/memoflow-mcp-py/CHANGELOG.md
Project-URL: Issues, https://github.com/evigasoft/memoflow/issues
Keywords: durable-execution,workflows,agents,mcp
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Typing :: Typed
Requires-Python: >=3.11
Description-Content-Type: text/markdown
Requires-Dist: memoflow-sdk<0.2,>=0.1.0
Provides-Extra: dev
Requires-Dist: mypy<3,>=1.19; extra == "dev"
Requires-Dist: pytest<10,>=9; extra == "dev"
Requires-Dist: ruff<1,>=0.14; extra == "dev"

# MemoFlow MCP adapter for Python

Provider-library-independent MCP tool adapter for server-backed MemoFlow
activities. It reserves tool budget before dispatch, records immutable
invocation and tool-effect transitions, injects a stable idempotency key, and
restores settled results from protected durable output before any new budget
or network effect.

```python
adapter = McpToolAdapter(client)
result = await adapter.call_tool(McpToolRun(
    server=McpServer("notes", version="1"),
    tool=McpTool("save_note", version="1", arguments={"note": "hello"}),
    budget=AiBudgetEstimate(total_tokens=0, tool_calls=1),
    recorded_replay_key="save-note-turn-1",
))
```

The injected client is structural and must provide an async `call_tool`
method. This keeps the durability boundary independent of any particular MCP
transport package.
