Metadata-Version: 2.5
Name: mcp-cross-exam
Version: 0.1.0
Summary: Audit MCP servers by cross-examining them.
Project-URL: Homepage, https://github.com/smusali/mcp-cross-exam
Project-URL: Repository, https://github.com/smusali/mcp-cross-exam
Project-URL: Issues, https://github.com/smusali/mcp-cross-exam/issues
Project-URL: Changelog, https://github.com/smusali/mcp-cross-exam/blob/main/docs/CHANGELOG.md
Project-URL: Documentation, https://github.com/smusali/mcp-cross-exam/blob/main/docs/USAGE.md
Author-email: Samir Musali <samir.musali@gmail.com>
License-Expression: MIT
License-File: LICENSE
Keywords: agents,audit,ci,mcp,model-context-protocol,testing
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
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: Programming Language :: Python :: 3.15
Classifier: Topic :: Software Development :: Quality Assurance
Classifier: Topic :: Software Development :: Testing
Classifier: Typing :: Typed
Requires-Python: >=3.11
Requires-Dist: anyio<5,>=4.6
Requires-Dist: httpx2<3,>=2.10
Requires-Dist: jinja2<4,>=3.1
Requires-Dist: jsonschema<5,>=4.23
Requires-Dist: mcp-types<2.4,>=2.3
Requires-Dist: mcp<2.4,>=2.3
Requires-Dist: pydantic<3,>=2.11
Requires-Dist: rfc8785<0.2,>=0.1.4
Requires-Dist: rich<16,>=13
Requires-Dist: typer<1,>=0.12
Requires-Dist: uvicorn<1,>=0.34
Description-Content-Type: text/markdown

# mcp-cross-exam

Audit one MCP server and write a scored report.

```mermaid
flowchart LR
  T["Endpoint"] --> G{"Guard"}
  G -->|"refused"| X["Exit 2"]
  G -->|"allowed"| C["Connect"]
  C --> P["Run probes"]
  P --> S["Score"]
  S --> R["JSON and HTML"]
```

## Install

```sh
pipx install mcp-cross-exam
uvx mcp-cross-exam --help
```

## Try it

Start the local server, then audit it. The server defaults to `session.expired-empty-success` and `schema.undeclared-required-arg`:

```sh
mcp-cross-exam fixture serve --http 127.0.0.1:8765
mcp-cross-exam http://127.0.0.1:8765/mcp
```

`--clean` serves no defects, and that audit exits 0. A server with findings exits 3 unless `--fail-on` says otherwise.

## Probes

| Family | What a finding means |
| --- | --- |
| Transport and session | Negotiation, headers, reconnects, stream resume, or an expired session is wrong. |
| Schema | A tool definition, argument, error, or description does not match what the server does. |

The catalog is in [Methodology](docs/METHODOLOGY.md).

## Safety

Stdio and a loopback host are local. Any other host must match `[target] allow`, and `--target-is-not-production` still needs that match. Credentials come from the environment and are redacted from the run directory.

Not a pentest, not a load tester, not a proxy or gateway, and not a hosted service.

## More

- [Usage](docs/USAGE.md)
- [Methodology](docs/METHODOLOGY.md)
- [Changelog](docs/CHANGELOG.md)
- [Limitations](docs/limitations.md)
