openapi-agent-ready 0.2.0__tar.gz → 0.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- openapi_agent_ready-0.2.1/CHANGELOG.md +129 -0
- {openapi_agent_ready-0.2.0 → openapi_agent_ready-0.2.1}/PKG-INFO +1 -1
- openapi_agent_ready-0.2.1/openapi.yaml +11890 -0
- {openapi_agent_ready-0.2.0 → openapi_agent_ready-0.2.1}/pyproject.toml +1 -1
- openapi_agent_ready-0.2.1/src/agent_ready/__init__.py +24 -0
- {openapi_agent_ready-0.2.0 → openapi_agent_ready-0.2.1}/src/agent_ready/auditor.py +12 -0
- {openapi_agent_ready-0.2.0 → openapi_agent_ready-0.2.1}/src/agent_ready/cli.py +4 -1
- {openapi_agent_ready-0.2.0 → openapi_agent_ready-0.2.1}/tests/test_audit.py +59 -0
- openapi_agent_ready-0.2.0/CHANGELOG.md +0 -107
- openapi_agent_ready-0.2.0/src/agent_ready/__init__.py +0 -16
- {openapi_agent_ready-0.2.0 → openapi_agent_ready-0.2.1}/.github/workflows/ci.yml +0 -0
- {openapi_agent_ready-0.2.0 → openapi_agent_ready-0.2.1}/.github/workflows/publish.yml +0 -0
- {openapi_agent_ready-0.2.0 → openapi_agent_ready-0.2.1}/.gitignore +0 -0
- {openapi_agent_ready-0.2.0 → openapi_agent_ready-0.2.1}/CONTRIBUTING.md +0 -0
- {openapi_agent_ready-0.2.0 → openapi_agent_ready-0.2.1}/LICENSE +0 -0
- {openapi_agent_ready-0.2.0 → openapi_agent_ready-0.2.1}/README.md +0 -0
- {openapi_agent_ready-0.2.0 → openapi_agent_ready-0.2.1}/examples/agent_ready_booking_api.yaml +0 -0
- {openapi_agent_ready-0.2.0 → openapi_agent_ready-0.2.1}/examples/sample_booking_api.yaml +0 -0
- {openapi_agent_ready-0.2.0 → openapi_agent_ready-0.2.1}/src/agent_ready/mcp_generator.py +0 -0
- {openapi_agent_ready-0.2.0 → openapi_agent_ready-0.2.1}/src/agent_ready/report_generator.py +0 -0
- {openapi_agent_ready-0.2.0 → openapi_agent_ready-0.2.1}/src/agent_ready/rubric.py +0 -0
- {openapi_agent_ready-0.2.0 → openapi_agent_ready-0.2.1}/tests/test_mcp_conformance.py +0 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project are documented here.
|
|
4
|
+
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
5
|
+
|
|
6
|
+
## [Unreleased]
|
|
7
|
+
|
|
8
|
+
## [0.2.1] - 2026-07-31
|
|
9
|
+
|
|
10
|
+
Found by running the published 0.2.0 against Asana's public spec.
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
- **Generated scaffolds could contain duplicate arguments and fail to parse.**
|
|
14
|
+
OpenAPI identifies a parameter by name *and* location, and an operation-level
|
|
15
|
+
declaration overrides a path-level one. The extractor concatenated both lists
|
|
16
|
+
without deduplicating, so a spec declaring the same parameter at each level —
|
|
17
|
+
Asana's declares `project_gid` that way — produced a function with two
|
|
18
|
+
identically-named arguments, a Python `SyntaxError`. Parameters declared at
|
|
19
|
+
both levels are now deduplicated with operation-level winning; the same name
|
|
20
|
+
in a different location is still treated as distinct.
|
|
21
|
+
- **`--version` reported a stale hardcoded number.** The CLI printed `0.1.0`
|
|
22
|
+
from a published 0.2.0 install. The version is now read from installed package
|
|
23
|
+
metadata, so `pyproject.toml` is the single source of truth and cannot drift.
|
|
24
|
+
|
|
25
|
+
## [0.1.0] - 2026-07-28
|
|
26
|
+
|
|
27
|
+
### Added
|
|
28
|
+
- Seven-category AI-readiness rubric for OpenAPI specs
|
|
29
|
+
- CLI with text, markdown, and JSON output formats
|
|
30
|
+
- CI gate support via `--min-score` and `--max-fails` with documented exit codes
|
|
31
|
+
- Remote spec loading over http(s)
|
|
32
|
+
- Parameter `$ref` resolution and path-level shared parameter inheritance
|
|
33
|
+
- MCP server scaffold generation for endpoints that pass the audit
|
|
34
|
+
- Python API (`load_spec`, `run_audit`)
|
|
35
|
+
|
|
36
|
+
### Fixed
|
|
37
|
+
- OpenAPI `default` responses now count as error documentation. Previously only
|
|
38
|
+
4xx/5xx codes were recognised, which failed every endpoint in specs that use
|
|
39
|
+
`default` — including Stripe's entire public API. (Found by auditing Stripe.)
|
|
40
|
+
- Ambiguity findings are capped at the 25 most-similar pairs with a summary
|
|
41
|
+
line, so large catalogues produce a readable report.
|
|
42
|
+
- Usage-guidelines detection is now regex-based; literal matching missed
|
|
43
|
+
phrasings like "use this only when" and "use this only after".
|
|
44
|
+
- CLI exits cleanly when its output is piped to `head` or `less`.
|
|
45
|
+
|
|
46
|
+
### Added (category 8)
|
|
47
|
+
- **Tool Surface & Schema Strictness** category, derived from OpenAI's
|
|
48
|
+
function-calling guidance: flags catalogues far above the ~20-tool ceiling,
|
|
49
|
+
request bodies incompatible with strict mode (`additionalProperties: false`,
|
|
50
|
+
all properties required), and parameters that imply a fixed value set but
|
|
51
|
+
accept free-form strings where an enum belongs.
|
|
52
|
+
- Findings now carry a `scope` ("endpoint" or "spec"). Spec-level findings are
|
|
53
|
+
weighted at 50% of their category so a single whole-API finding isn't averaged
|
|
54
|
+
away against hundreds of endpoint findings. Stripe's tool-surface score was
|
|
55
|
+
99/100 before this fix and 49.6/100 after.
|
|
56
|
+
|
|
57
|
+
### Added
|
|
58
|
+
- **MCP conformance test suite** (`tests/test_mcp_conformance.py`). Launches the
|
|
59
|
+
generated scaffold as a subprocess, completes a real MCP handshake over stdio
|
|
60
|
+
using the official client, and validates the advertised tool definitions:
|
|
61
|
+
name format, uniqueness, description presence, `inputSchema` validity as JSON
|
|
62
|
+
Schema, required-argument correctness, and side-effect disclosure. Previously
|
|
63
|
+
the only check on generated output was that the file compiled.
|
|
64
|
+
|
|
65
|
+
### Fixed
|
|
66
|
+
- **Request body fields were silently dropped.** The generator read only
|
|
67
|
+
`parameters`, so a `POST` endpoint's payload properties never became tool
|
|
68
|
+
arguments — producing, for example, a create-booking tool with no way to say
|
|
69
|
+
what to book. Syntactically valid and completely uncallable, which is exactly
|
|
70
|
+
the class of bug a compile check cannot catch.
|
|
71
|
+
- **No arguments were marked required.** Every parameter was emitted with a
|
|
72
|
+
`= None` default, so the advertised `inputSchema` had an empty `required`
|
|
73
|
+
array. A model could call an endpoint with a `{path_param}` and omit it,
|
|
74
|
+
producing a malformed URL. Path parameters are now always required, and
|
|
75
|
+
`required: true` from the spec is honoured for query, header, and body fields.
|
|
76
|
+
|
|
77
|
+
### Fixed
|
|
78
|
+
- **Generated scaffold failed on mcp 2.0.** FastMCP was replaced by `MCPServer`
|
|
79
|
+
in the 2.x SDK, so `from mcp.server.fastmcp import FastMCP` no longer resolved
|
|
80
|
+
and every generated server crashed on import. The scaffold now imports through
|
|
81
|
+
a compatibility shim supporting both generations, verified against mcp 1.28.1
|
|
82
|
+
and 2.0.0.
|
|
83
|
+
|
|
84
|
+
### Added
|
|
85
|
+
- Generated tools now carry **`ToolAnnotations`** (`readOnlyHint`,
|
|
86
|
+
`destructiveHint`, `idempotentHint`, `openWorldHint`) derived from the HTTP
|
|
87
|
+
method. Prose in a description helps a model reason about side effects;
|
|
88
|
+
annotations let a client *enforce* — auto-approving reads while requiring
|
|
89
|
+
confirmation for writes. camelCase field names are used deliberately, as they
|
|
90
|
+
are accepted by both SDK generations.
|
|
91
|
+
|
|
92
|
+
### Changed
|
|
93
|
+
- **Generated scaffolds are now self-documenting.** The file header states its
|
|
94
|
+
dependencies (`pip install mcp httpx`), how to run it, a ready-to-paste Claude
|
|
95
|
+
Desktop config block, and three things to fix before shipping — notably that
|
|
96
|
+
the scaffold sends no credentials, so calls against a real API will 401 until
|
|
97
|
+
auth is wired in. Previously someone receiving a generated file out of context
|
|
98
|
+
had no way to know what it needed.
|
|
99
|
+
- **Generated servers are named after their source API** (`spotify-web-api`
|
|
100
|
+
rather than the shared `generated-api-server` placeholder). Two generated
|
|
101
|
+
servers connected to the same client no longer present identical names.
|
|
102
|
+
- **The `[mcp]` extra is now also available as `[server]`,** which describes it
|
|
103
|
+
accurately: these are dependencies the *generated* server needs at runtime,
|
|
104
|
+
not dependencies of the auditor. `[mcp]` is retained as an alias.
|
|
105
|
+
|
|
106
|
+
### Fixed
|
|
107
|
+
- **Conformance tests silently skipped under mcp 2.0.** The module-level guard
|
|
108
|
+
probed `mcp.server.fastmcp`, which does not exist in the 2.x SDK, so the entire
|
|
109
|
+
suite skipped against a current install — a green build that verified nothing.
|
|
110
|
+
The guard now probes for either server class, and CI fails explicitly if the
|
|
111
|
+
suite skips rather than runs.
|
|
112
|
+
|
|
113
|
+
### Fixed
|
|
114
|
+
- **Conformance tests failed against mcp 2.0.** The 2.x SDK renamed result
|
|
115
|
+
fields from camelCase to snake_case (`serverInfo` -> `server_info`,
|
|
116
|
+
`inputSchema` -> `input_schema`, `readOnlyHint` -> `read_only_hint`), and the
|
|
117
|
+
tests were pinned to the 1.x spelling. Assertions now read fields through
|
|
118
|
+
version-agnostic accessors. The suite is verified against both mcp 1.28.1 and
|
|
119
|
+
2.0.0.
|
|
120
|
+
- **Failures inside anyio task groups are now readable.** Exception groups are
|
|
121
|
+
flattened to their leaf causes and `BaseException` is caught rather than
|
|
122
|
+
`Exception`, so a `BaseExceptionGroup` no longer escapes the diagnostic
|
|
123
|
+
wrapper and leaves the real error truncated. This is what finally surfaced
|
|
124
|
+
the rename above.
|
|
125
|
+
|
|
126
|
+
### Changed
|
|
127
|
+
- Tool listings are fetched once per generated file and cached rather than
|
|
128
|
+
spawning a server subprocess per test, cutting spawns from ~14 to 4 and
|
|
129
|
+
running roughly a third faster.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openapi-agent-ready
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: Audit any OpenAPI spec for AI-agent and MCP readiness, and generate an MCP server scaffold.
|
|
5
5
|
Project-URL: Homepage, https://github.com/sfaisal/agent-ready
|
|
6
6
|
Project-URL: Issues, https://github.com/sfaisal/agent-ready/issues
|