Skip to content

Run a suite against any MCP server named in its profile - #33

Open
RobertCrupa wants to merge 1 commit into
mainfrom
stack/1-mcp-per-profile
Open

RobertCrupa wants to merge 1 commit into
mainfrom
stack/1-mcp-per-profile

Conversation

@RobertCrupa

@RobertCrupa RobertCrupa commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

Stack 1 of 4. Merge in order: this PR, then #34, #35, #36. It replaces #32, which had all four in one PR.

A suite profile can now name the MCP server its agent uses. The default is still the Apify MCP server narrowed with ?tools=, so runs of existing suites do not change.

What changes

  • Contract 1.2.0: the MCP server spec on dataset items (mcp: http or stdio, with ${VAR} placeholders) and mcpServer on the agent span. tool.called now takes a name alternation (a|b) and max, so a check can set a call budget.
  • Runner: src/mcp.ts builds the Claude Code MCP config, the preflight probe and the tool-schema snapshots from the same resolved spec. The new mcpEnv input gives values for the placeholders. --strict-mcp-config is always on, so the developer's own MCP servers never get into a session. Filled secrets are redacted from stored stderr.
  • Runner, other changes:
    • New scenarioIds filter.
    • Actor runs that are still running after a session are aborted.
    • When the account's concurrent run limit refuses a run, the result is inconclusive (infrastructure), not a fail.
    • Preflight warns when concurrency is higher than the account's run limit.
  • Profiles and judge: profiles can set mcp and forcedFixAreas, and the judge reads forcedFixAreas. JUDGE_IMPL_VERSION goes from 0.4.0 to 0.5.0.

Tests: contract 30, judge 196, workflow-runner 56, tools 8. scenarios:check passes.

A suite profile can name the MCP server its agent uses (`mcp`: http or
stdio, `${VAR}` placeholders filled from the runner environment). The
default stays the Apify MCP server narrowed with `?tools=`.

- contract 1.2.0: MCP server spec on dataset items, `mcpServer` on the
  agent span, `tool.called` takes a name alternation and `max`.
- runner: src/mcp.ts resolves the server for Claude Code, preflight and
  tool-schema snapshots. `mcpEnv` input for placeholder values. Strict
  MCP config always. Filled secrets are redacted from stored stderr.
- runner: `scenarioIds` filter. Leftover Actor runs are aborted after a
  session. A run the account concurrent run limit refused is
  infrastructure (inconclusive), not a result; preflight warns when
  concurrency is above the account limit.
- profiles: `mcp` and `forcedFixAreas`; the judge reads
  `forcedFixAreas` (JUDGE_IMPL_VERSION 0.5.0).
@apify-service-account apify-service-account added the tested Temporary label used only programatically for some analytics. label Oct 16, 2026
@apify-service-account apify-service-account added the t-ai Issues owned by the AI team. label Oct 16, 2026
@RobertCrupa
RobertCrupa requested a review from artogahr October 19, 2026 11:37
@RobertCrupa
RobertCrupa added this pull request to stack #40 October 19, 2026 11:43
@artogahr artogahr added the adhoc Ad-hoc unplanned task added during the sprint. label Oct 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

adhoc Ad-hoc unplanned task added during the sprint. t-ai Issues owned by the AI team. tested Temporary label used only programatically for some analytics.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants