Skip to content

v0.3.0-beta.1

Latest

Choose a tag to compare

@mocha06 mocha06 released this 20 Jul 17:41
63bb086

[0.3.0-beta.1] - 2026-07-20

Added

  • MCP: hosted structured logging on the HTTP transport (#373). Each HTTP request and each tool call emits one JSON line on stderr (event: http_request / tool_call) for hosted debugging, with a privacy allowlist (method, path, status, duration, caller identity, per-tool arg_keys (key names only, never argument values)). Request logging uses pure-ASGI middleware; tool logging uses the #378 tool-call middleware chain via the same structured emitter. The dedicated structured logger is pinned at INFO independently of PIPEFY_MCP_LOG_LEVEL (which governs FastMCP/root text only). Stdio is unchanged: stdout remains the JSON-RPC wire. HTTP is served via uvicorn with access_log=False so structured request lines replace uvicorn's text access log.
  • CLI: pipefy relation table list --ids <id,...> mirrors MCP get_table_relations (table-relation IDs, not database table IDs).
  • CLI: pipefy pipe start-form <pipe_id> mirrors MCP get_start_form_fields (optional --required-only).
  • CLI: pipefy card fill <card_id> --phase <phase_id> --fields '{"…"}' fills phase fields non-interactively; filters to editable phase field IDs before update_card. Optional --required-only limits the phase field lookup to required fields. JSON responses may include skipped_field_ids when --fields keys are dropped by the filter.
  • SDK: pipefy_sdk.field_filters exports filter_editable_field_definitions, filter_fields_by_definitions, and skipped_field_ids for shared MCP/CLI field filtering.
  • MCP: the HTTP transport derives a configurable DNS-rebinding Host/Origin allowlist. FastMCP auto-enables a loopback-only allowlist on its 127.0.0.1 construction host, so behind a proxy that forwards the public Host the server answered 421 Misdirected Request before any handler ran; setting resource_server_url now widens the allowlist to that public host (plus loopback) and keeps DNS-rebinding protection on. PIPEFY_MCP_ALLOWED_HOSTS and PIPEFY_MCP_ALLOWED_ORIGINS (JSON) extend it for extra hostnames or a stricter Origin posture; an empty PIPEFY_MCP_ALLOWED_ORIGINS is the strictest form, rejecting any request that sends an Origin. Unset (no resource-server URL and no override) leaves FastMCP's loopback-only default in force, so the installed local subprocess case is unchanged. Closes #303.

Changed

  • MCP: the HTTP bind-safety guard now keys on auth posture, not bind interface. The old _assert_safe_http_bind refused any non-loopback HTTP bind, which false-positived on the entire hosted deployment (a container binds 0.0.0.0 and is still private) and lived in the run path, so a caller building the ASGI app directly bypassed it. It is replaced by McpSettings._enforce_bind_safety, a cross-field validator at the settings boundary that every serving path inherits: the unauthenticated local profile still refuses a non-loopback HTTP bind unless PIPEFY_MCP_ALLOW_INSECURE_HTTP_BIND is set, while the remote profile (which always carries inbound auth) binds any host without a bind-host check. Loopback detection moves to pipefy_infra.security.is_loopback_host, covering all of 127.0.0.0/8 and ::1 rather than three hardcoded string literals. Closes #379.
  • CLI / Plugin (Claude Code): the CLI install path now installs pipefy-cli from PyPI instead of a git+…#subdirectory=packages/cli reference with --with sibling pins. The /pipefy:install slash command runs uv tool install --force pipefy-cli, and the documented snippets (root README.md, packages/cli/README.md, docs/MIGRATION.md) use uvx --from pipefy-cli pipefy … / uv tool install pipefy-cli. PyPI resolves pipefy and pipefy-auth transitively, so the explicit --with flags are gone and installs no longer pay a git clone plus build. This matches the MCP server's PyPI install (#368); do not pass a global --prerelease allow, which would let transitive dependencies jump to their own pre-releases. RELEASE.md verification snippets move to PyPI accordingly, and the now-unused latest moving-tag release step is removed. Closes #234.