Skip to content

fix(plugin-host): source declared_supports_mcp from the plugin manifest (REQUIREMENT-039)#315

Merged
Shooksie merged 3 commits into
release/0.7from
agent/v0.7.0/supports-mcp-from-manifest
Jul 9, 2026
Merged

fix(plugin-host): source declared_supports_mcp from the plugin manifest (REQUIREMENT-039)#315
Shooksie merged 3 commits into
release/0.7from
agent/v0.7.0/supports-mcp-from-manifest

Conversation

@Shooksie

@Shooksie Shooksie commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

What

The provider plugin host now sources declared_supports_mcp from the plugin's DECLARED manifest field (PluginManifest.supports_mcp) instead of a hardcoded true. First slice of TASK-277 / REQUIREMENT-039.

The #314 (rc.8) plumbing already threads declared_supports_mcp all the way into capabilities().supports_mcp and the MCP-injection decision. This PR only changes its SOURCE from a constant to the manifest.

Changes

  • New helper declared_supports_mcp_from_manifest in plugin_backend.rs reads manifest.supports_mcp with a back-compat default of true. discover_provider_plugins calls it instead of the old let declared_supports_mcp = true. Unit test covers None (undeclared -> true), Some(false), Some(true).
  • All in-tree PluginManifest struct literals gain supports_mcp: None. This is mechanical fallout of the new protocol field (Rust struct literals must set every field); most sites are test helpers.
  • The in-tree animus-plugin-runtime provider manifest emits supports_mcp: None with a TODO(codex-p2) to plumb an explicit opt-out through ProviderInfo. Deferred because it mirrors the same deferral in the protocol repo provider_main, and ProviderInfo has no opt-out field yet.

Back-compat

An undeclared field (older plugins built before protocol 1.2.0, which omit it) resolves to true via unwrap_or(true) — identical to today behavior. Only an explicit false opts a provider out of host MCP-server injection.

Coordination for main session — REQUIRED before merge

  • This depends on the animus-protocol change (PR to release/0.7) that adds PluginManifest.supports_mcp. To build now, the animus-protocol git deps in Cargo.toml, crates/orchestrator-cli/Cargo.toml, and crates/orchestrator-daemon-runtime/Cargo.toml are TEMPORARILY repinned from tag v0.7.0-rc.5 to branch agent/v0.7.0/declared-supports-mcp (plus the resulting Cargo.lock update).
  • Main session must repin the fleet to the CUT protocol tag (e.g. v0.7.0-rc.9) and cargo update before merge. Draft until then.

Gates

  • cargo check --workspace --all-targets: clean.
  • cargo animus-fmt: clean. cargo animus-lint (clippy): clean. cargo animus-bin-check: clean.
  • Targeted tests: orchestrator-plugin-host supports_mcp tests pass (new + existing); animus-plugin-runtime + orchestrator-core suites pass. One unrelated test (manual_phase_approval_resume_clears_task_pause_marker) fails only under full-suite parallelism and passes in isolation — a pre-existing test-isolation flake, not caused by this change.
  • codex review --uncommitted (high effort): no P1. Two P2 findings, both deferred: (1) runtime providers cannot yet declare supports_mcp:false via ProviderInfo — TODO added; (2) a theoretical stale manifest-cache omission — mitigated by the cache mtime-invalidation (a provider emitting the new field is a rebuilt, newer-mtime binary that busts the cache).

Part of TASK-277 / REQUIREMENT-039.

Provider discovery now reads declared_supports_mcp from the plugin's DECLARED
manifest field (PluginManifest.supports_mcp) instead of a hardcoded true
(TASK-277 / REQUIREMENT-039). The #314 plumbing already threads
declared_supports_mcp into capabilities().supports_mcp; this only changes its
SOURCE.

- New helper declared_supports_mcp_from_manifest reads manifest.supports_mcp
  with a back-compat default of true, so an undeclared field (older plugins
  before protocol 1.2.0) keeps the historical MCP-capable default; only an
  explicit false opts a provider out. Unit test covers None/false/true.
- All in-tree PluginManifest literals gain supports_mcp: None (mechanical,
  required by the new protocol field).
- animus-plugin-runtime provider manifest emits None with a TODO(codex-p2) to
  plumb an opt-out through ProviderInfo (mirrors the protocol repo deferral).

Protocol dep temporarily repinned to the animus-protocol branch
agent/v0.7.0/declared-supports-mcp so this builds; the main session repins the
fleet to the cut protocol tag.
@vercel

vercel Bot commented Jul 9, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
animus-docs Ready Ready Preview, Comment Jul 9, 2026 10:28pm

Request Review

Shooksie added 2 commits July 9, 2026 16:25
…ts_mcp landed)

Protocol #4 (supports_mcp manifest field) is merged + tagged v0.7.0-rc.6; repin
all animus-protocol git deps from the dev branch to that tag. Merged current
release/0.7 (rc.8 cleanup PRs) in; builds clean.
@Shooksie
Shooksie marked this pull request as ready for review July 9, 2026 22:27
@Shooksie
Shooksie merged commit eb7b848 into release/0.7 Jul 9, 2026
9 of 10 checks passed
Shooksie added a commit that referenced this pull request Jul 9, 2026
Consolidated cleanup on top of rc.8, all driven by the 'ask the plugin, don't
hardcode' principle:
- TASK-275 (#319): migrate ALL role resolution to serves_kind/discover_by_kind
  (fixes log_storage + trigger silent role-miss) + a reserved-provider-name
  install-gate bypass (P1).
- TASK-276 (#318): route task-status OUTPUT projections through the subject
  router, not the empty in-tree hub.tasks() store (fixes portal tasks stuck
  InProgress after a run finishes/fails).
- TASK-278 (#317): remove the deprecated --task-id/--requirement-id flags from
  the CLI + MCP; task/requirement are ordinary subject kinds via --subject-id.
  BREAKING: external callers must switch; requirement runs via --subject-id need
  an explicit --workflow-ref.
- TASK-277 (#315 + animus-protocol v0.7.0-rc.6): supports_mcp is now a
  first-class DECLARED plugin manifest field; the kernel reads it instead of a
  name heuristic. Protocol deps repinned to v0.7.0-rc.6.
- TASK-284 (#320): new 'animus mcp call' / 'animus mcp tools' — invoke MCP tools
  from the CLI via the proxy (enabler for deterministic MCP use in command
  phases + scripts).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant