Metadata-Version: 2.5
Name: sf-m3
Version: 0.2.16
Summary: Python SDK for testing MCP servers and agent harnesses
Project-URL: Homepage, https://github.com/sineframe/m3
Project-URL: Repository, https://github.com/sineframe/m3
Project-URL: Issues, https://github.com/sineframe/m3/issues
Author: M3 contributors
License-Expression: Apache-2.0
License-File: LICENSE
Keywords: agents,mcp,model-context-protocol,pytest,testing
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Testing
Requires-Python: >=3.10
Requires-Dist: agent-client-protocol==0.12.1
Requires-Dist: anyio<5,>=4.5
Requires-Dist: httpcore2<3,>=2.5
Requires-Dist: httpcore<2,>=1
Requires-Dist: httpx2<3,>=2.5
Requires-Dist: httpx<1,>=0.27
Requires-Dist: idna<4,>=3
Requires-Dist: jsonschema<5,>=4.20
Requires-Dist: mcp<3,>=2.0.0
Requires-Dist: pydantic<3,>=2.8
Requires-Dist: python-dotenv<2,>=1
Requires-Dist: starlette<2,>=0.40
Requires-Dist: tomli<3,>=2; python_version < '3.11'
Requires-Dist: uvicorn[standard]<1,>=0.30
Provides-Extra: all
Requires-Dist: cryptography<51,>=43; extra == 'all'
Requires-Dist: httpx<1,>=0.27; extra == 'all'
Requires-Dist: hypothesis<7,>=6.100; extra == 'all'
Requires-Dist: mkdocs-material<10,>=9.5; extra == 'all'
Requires-Dist: mkdocstrings[python]<2,>=0.25; extra == 'all'
Requires-Dist: openai<4,>=3.16; extra == 'all'
Requires-Dist: pytest-asyncio<2,>=0.23; extra == 'all'
Requires-Dist: pytest<10,>=8; extra == 'all'
Requires-Dist: sqlalchemy<3,>=2.0; extra == 'all'
Provides-Extra: docs
Requires-Dist: mkdocs-material<10,>=9.5; extra == 'docs'
Requires-Dist: mkdocstrings[python]<2,>=0.25; extra == 'docs'
Provides-Extra: judge
Requires-Dist: openai<4,>=3.16; extra == 'judge'
Provides-Extra: property
Requires-Dist: hypothesis<7,>=6.100; extra == 'property'
Provides-Extra: pytest
Requires-Dist: cryptography<51,>=43; extra == 'pytest'
Requires-Dist: pytest-asyncio<2,>=0.23; extra == 'pytest'
Requires-Dist: pytest-timeout<3,>=2.4; extra == 'pytest'
Requires-Dist: pytest-xdist<4,>=3.6; extra == 'pytest'
Requires-Dist: pytest<10,>=8; extra == 'pytest'
Provides-Extra: storage
Requires-Dist: sqlalchemy<3,>=2.0; extra == 'storage'
Description-Content-Type: text/markdown

# M3 Python SDK

The `sf-m3` package provides direct MCP clients, agent sessions, pytest
integration, assertions, traces, evaluations, and optional persistence.

```sh
uv add "sf-m3[pytest]"
```

The SDK requires Python 3.10 or newer. Installing it does not install the
standalone `m3` command or viewer.

Use the [first test](https://m3.sineframe.com/docs/getting-started) for a
runnable project and the [Python reference](https://m3.sineframe.com/docs/reference/python/)
for public contracts.

## Develop the SDK

```sh
just setup
uv run --project sdk --extra pytest --group typecheck pytest sdk/tests
```

Runnable guide projects live under `sdk/examples/docs`. Follow the
[documentation writing guide](https://github.com/sineframe/m3/blob/main/docs/documentation-writing-guide.md)
when changing them.
