Changelog¶
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, with project-specific grouping where useful.
[0.3.3] - 2026-05-31¶
Fixed¶
- Normalize route parameter schemas at the
RouteTableboundary so all server adapters receive canonical object schemas. - Ensure MCP
tools/listresponses always emit object-shapedinputSchemavalues. - Harden OpenAPI request model generation for empty or non-object parameter schemas.
- Bump the minimum
toolregistryversion to>=0.11.1for schema-generation fixes in the core package.
[0.3.2] - 2026-05-28¶
Changed¶
- Minimum
toolregistryversion bumped to>=0.11.0so downstream packages can rely on the latestToolConfigmetadata fields. - Switched the complexipy pre-commit hook to the official
complexipy-pre-commithook with explicit file filtering.
[0.3.1] - 2026-05-19¶
Added¶
- Route listing now filters deferred tools, matching the progressive-disclosure behavior used by served registries.
- Deployment profile filtering can now be overridden by configuration files.
Changed¶
- Minimum
toolregistryversion bumped to>=0.10.2.
[0.3.0] - 2026-05-18¶
Added¶
--profileCLI flag for deployment-context tag filtering.--profile remotedisables tools taggedfile_system,destructive, orprivilegedviaToolRegistry.disable_by_tags();--profile localapplies no filter. Theprofileparameter is also exposed onrun_openapi_server()andrun_mcp_server()for programmatic use (#30).- Post-register hooks in
create_registry_from_config(): the function now accepts an optionalpost_register_hooks: list[PostRegisterHook] | Noneparameter. Hooks are registered on theToolRegistrybefore any source is loaded; returning a non-empty string from a hook auto-disables the tool (#31). apply_profile(registry, profile): new public helper that applies a named profile filter to anyToolRegistry. Profile→tag mapping is expressed inPROFILE_DISABLE_TAGS(dict) for easy extension.
Changed¶
- Minimum
toolregistryversion bumped to>=0.10.1to pick updisable_by_tags()andadd_post_register_hook().
[0.2.2] - 2026-05-18¶
Changed¶
run_openapi_server()andrun_mcp_server()accept a pre-built registry: both functions now accept an optionalregistry: ToolRegistry | Noneparameter. When provided,config_pathis ignored andcreate_registry_from_configis skipped entirely, letting downstream packages inject a custom registry without reimplementing the startup sequence (#28).
[0.2.1] - 2026-05-10¶
Changed¶
- Reorganized vendored zero-dependency modules into
_vendor/sub-package for cleaner separation. - Replaced
loguruwith a vendored lightweight structlog shim, removing the external logging dependency. - Switched
complexipyto a local pre-commit hook.
Fixed¶
- Excluded
_vendor/fromrufflint checks to avoid false positives on vendored code.
[0.2.0] - 2026-05-06¶
Added¶
- Unified config system:
run_openapi_server()andrun_mcp_server()now load tools from a JSONC/YAML configuration file via--config, supporting Python class/module, MCP server, and OpenAPI endpoint sources with denylist/allowlist filtering (#24).
Changed¶
- Adapted to
toolregistry >= 0.9.1API changes (deprecatedtoolregistry.openapiimport migrated totoolregistry.integrations.openapi).
[0.1.3] - 2026-04-15¶
Added¶
- MCP session context passthrough: tool handlers can now receive the MCP session context object, enabling session-aware tool implementations.
Fixed¶
- Strip framework-injected fields (e.g.
__mcp_session__) from OpenAPI adapter input before calling the handler, preventing unexpected keyword argument errors. - Replace
python-dotenvwith a vendored zero-dependency dotenv loader, removing the external dependency. toolregistry >= 0.6.1now required to pick up the kwargs JSON Schema fix.
[0.1.2] - 2026-03-22¶
Added¶
- Parameter validation in MCP adapter:
RouteEntrynow carriesparameters_modelfromTool, enabling Pydantic-based type coercion (e.g. string"8"→int(8)) before handler execution. This fixes compatibility with MCP clients that serialize all arguments as strings (e.g. Codex).
Changed¶
- MCP
call_toolhandler now usesvalidate_input=Falseto bypass the MCP SDK's strict JSON Schema validation, delegating type validation to Pydantic's more lenient coercion instead.
[0.1.1] - 2026-03-18¶
Fixed¶
- RouteTable sync with ToolRegistry: RouteTable now properly syncs with ToolRegistry on external state changes (e.g. tools added/removed/toggled outside the adapter layer).
- Namespace-level enable/disable: Fixed handling of namespace-level enable/disable operations in RouteTable sync, ensuring bulk toggle propagates correctly to all tools in a namespace.
Changed¶
- Require
toolregistry >= 0.6.0foron_changecallback support used by RouteTable sync.
[0.1.0] - 2026-03-14¶
Initial release of toolregistry-server as a standalone package, spun off from toolregistry-hub.
Added¶
- Central Route Table (
RouteTable,RouteEntry): Unified routing layer that bridgesToolRegistryand protocol adapters, with ETag versioning, observer pattern, and dynamic enable/disable support (#2, PR #7) - OpenAPI Adapter: FastAPI-based REST API adapter with automatic Pydantic model generation from JSON Schema, dynamic OpenAPI schema, and tool grouping by namespace (#3, PR #8)
- MCP Adapter: Model Context Protocol adapter with
list_tools/call_toolhandlers and support for stdio, SSE, and Streamable HTTP transports (#4, PR #9) - ETag Caching: HTTP caching middleware for
/toolsand/openapi.jsonendpoints withIf-None-Matchconditional request support (#5, PR #10) - CLI: Command-line interface with
openapiandmcpsubcommands, JSON/JSONC configuration, customizable banner display (#6, PR #11, PR #13) - Authentication: Bearer token authentication module with multi-token support, runtime token management, and dynamic enable/disable
- .env file loading: Support for loading environment variables from
.envfiles with--env-fileand--no-envCLI options (PR #14)